Spring 利用Annocation配置注入关系

1.为了更好的解释此类操作存在的意义,下面通过一种习惯性的开发进行问题的描述,例如,现在有一个IAdminService服务层,这个服务层要调用IAdminDAO和IRoleDAO两个数据层操作,于是现在的编写如下。

范例:定义数据层操作

定义两个接口:

public interface IAdminDAO {
	 public boolean findLogin();
}
public interface IRoleDAO {
	 public boolean findAll();
}

实现类:

public class AdminDAOImpl implements IAdminDAO {

	@Override
	public boolean findLogin() {
		System.out.println("[IAdminDAO] findLogin");
		return true;
	}

}
public class RoleDAOImpl implements IRoleDAO {

	@Override
	public boolean findAll() {
		System.out.println("[IRoleDAO] findAll");
		return true;
	}

}

最早的时候这两个数据层的类一定要编写工厂类,下面直接在applicationContext.xml文件里面定义。


随后所有的数据层一定要交给业务层进行调用,那么下面定义业务层的操作。

public interface IAdminService {

	 public boolean login();
}

定义实现操作子类:

public class AdminServiceImpl implements IAdminService {

	    private IAdminDAO adminDAO;
	    private IRoleDAO roleDAO;
	    @Override
	    public boolean login() {
	        this.adminDAO.findLogin();
	        this.roleDAO.findAll();
	        return false;
	    }
	    public IAdminDAO getAdminDAO() {
	        return adminDAO;
	    }
        //setter是给依赖注入关系使用的
	    public void setAdminDAO(IAdminDAO adminDAO) {
	        this.adminDAO = adminDAO;
	    }
	    public IRoleDAO getRoleDAO() {
	        return roleDAO;
	    }
	    public void setRoleDAO(IRoleDAO roleDAO) {
	        this.roleDAO = roleDAO;
	    }

}

类编写完成之后,下面需要定义applicationContext.xm文件,在这里面配置彼此的关系。


    
    

代码写到此处可以说最原始的操作实现完成,所有的关系都通过applicationContext.xml完成了。 

测试类:

public class TestAdmin {

	public static void main(String[] args) {

		ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
		IAdminService vo = ctx.getBean("adminService" , IAdminService.class);
		vo.login();
	}

}

输出结果:

[IAdminDAO] findLogin
[IRoleDAO] findAll

2.此时最大的直观感受就是避免了工厂类的编写操作,的确是节约了代码,但是反过来想,问题又会出现了,如果一个项目之中存在了有几百个DAO或Service,这样的写法太累了。

在Spring之中可以利用Annotation完全简化以上的操作。

范例:要增加新的命名空间

Spring 利用Annocation配置注入关系_第1张图片

Spring 利用Annocation配置注入关系_第2张图片

此时还不能进行开发需要设置Annocation开发包。

范例:设置Annocation的支持包


    	

现在表示在"com.jcn"下的所有程序类都支持Annocation的配置,而在Spring里面针对于组件Annocation配置只提供有三个注解定义(这三个注解的作用都一样,只是单词不同)

@Component:主要用于定义组件,一般都在DAO上使用

@Service:主要用于定义组件,一般都在Service上使用

@Repository:主要用于定义组件,一般在Action上使用

范例:修改AdminDAOImpl类

Spring 利用Annocation配置注入关系_第3张图片

Spring 利用Annocation配置注入关系_第4张图片Spring 利用Annocation配置注入关系_第5张图片

现在如果使用了注解定义组件,那么名称默认情况下就是类名称的结构形式:

        AdminDAOImpl,则访问此组件的名称就是"adminDAOImpl"

        RoleDAOImpl,则发那个文此组件的名称就是"roleDAOImpl"

范例:在Service层使用注解

package com.jcn.service.impl;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.jcn.dao.IAdminDAO;
import com.jcn.dao.IRoleDAO;
import com.jcn.service.IAdminService;

@Service
public class AdminServiceImpl implements IAdminService {
        //注入资源
	    @Resource
	    private IAdminDAO adminDAO;
        @Resource
	    private IRoleDAO roleDAO;
	    @Override
	    public boolean login() {
	        this.adminDAO.findLogin();
	        this.roleDAO.findAll();
	        return false;
	    }
}

此时的AdminServiceImpl类的引用名称是 adminServiceImpl

测试类:

public class TestAdmin {

	public static void main(String[] args) {

		ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
		IAdminService vo = ctx.getBean("adminServiceImpl" , IAdminService.class);
		vo.login();
	}

}

运行结果:

[IAdminDAO] findLogin
[IRoleDAO] findAll

 现在发现利用Annocation实现的注入操作,整个的操作流程是非常的简化的。

还能这么引用:

Spring 利用Annocation配置注入关系_第6张图片

测试发现选择第一种方=方式简化好,方便。

 

你可能感兴趣的:(#,spring全家桶,大学与Java那些年)