Spring框架之依赖注入DI(3.0)
基于Annotation的依赖注入配置**(核心)**
模拟数据层与业务层的控制:
Dept.java
import java.io.Serializable;
@SuppressWarnings("serial")
public class Dept implements Serializable {
private Integer deptno ;
private String dname ;
private String loc ;
public void setDeptno(Integer deptno) {
this.deptno = deptno;
}
public void setDname(String dname) {
this.dname = dname;
}
public void setLoc(String loc) {
this.loc = loc;
}
@Override
public String toString() {
return "Dept [deptno=" + deptno + ", dname=" + dname + ", loc=" + loc + "]";
}
}
1,定义一个IDeptDAO接口:
import cn.mldn.vo.Dept;
public interface IDeptDAO {
public boolean doCreate(Dept vo);
}
2,定义一个IDeptDao的实现子类,采用Annotaion自动解析的方式进行配置。
a,修改配置文件,在Namespaces中将context打上勾。
xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd">
b,启用Annotation,配置Annotaion的扫描包路径。
<!-- 表示在当前的配置中将采用Annotation注解的方式进行定义 -->
<context:annotation-config/>
<!-- 定义扫描包,在此包中定义的所有的程序类支持Annotation配置 -->
<context:component-scan base-package="cn.mldn"/>
关于三种Annotion的区别:
c,定义DeptDAO子类:
import org.springframework.stereotype.Component;
import cn.mldn.dao.IDeptDAO;
import cn.mldn.vo.Dept;
// 此时就相当于在applicationContext.xml文件中定义<bean>一样的,id是deptDAOImpl
@Component
public class DeptDAOImpl implements IDeptDAO {
@Override
public boolean doCreate(Dept vo) {
System.out.println("【DeptDAOImpl子类】,数据增加 : " + vo);
return true ;
}
}
3,定义业务层的操作接口:
import cn.mldn.vo.Dept;
public interface IDeptService {
public boolean add(Dept vo) ;
}
4,定义业务层实现子类,此子类依然需要进行注解配置。
·在业务层一定要引入数据层的子类对象,这个时候的对象引入有两种方式完成:
a,
private IDeptDAO deptDAO;//对象名字由用户自己来定义
//此时表示要在整个Spring之中自动找到名称为deptDAOImpl的子类对象实例进行引用传递
@Resource(name="deptDAOImpl")
public void setDeptDAO(IDeptDAO deptDAO) {
this.deptDAO = deptDAO;
}
b,
@Resource // 自动根据类型引用
private IDeptDAO deptDAO ; // 对象名字由用户自己来定义
定义DeptServiceImpl实现子类的定义:
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import cn.mldn.dao.IDeptDAO;
import cn.mldn.vo.Dept;
@Service
public class DeptServiceImpl implements IDeptService {
@Resource // 自动根据类型引用
private IDeptDAO deptDAO ; // 对象名字由用户自己来定义
@Override
public boolean add(Dept vo) {
return this.deptDAO.doCreate(vo);
}
}
5,定义测试类
public class TestDemoA {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"applicationContext.xml");
IDeptService service = ctx.getBean("deptServiceImpl",IDeptService.class);
Dept vo = new Dept() ;
vo.setDeptno(10);
vo.setDname("开发部");
vo.setLoc("北京");
System.out.println(service.add(vo));
}
}
运行结果: