Spring中只有两大核心技术:IOC&DI(控制反转&依赖注入),AOP(面向切面编程)
什么是依赖注入?
利用配置文件的关系来决定类之间的引用关系以及数据的设置操作.
1.构造方法注入
默认情况下如果在applicationContext.xml文件之中配置的程序都可以自动的找到Spring容器加载时进行对象的实例化操作.但是自动进行初始化的时候调用1是类中的无惨构造方法,而且通过反射机制应该知道.如果类中提供有无惨构造方法一定要比有参构造方法的实例化更加容易.
但是在Spring里面简化了反射的处理机制,也就是说利用Spring中的动态的特性可以直接明确调用构造方法传递参数.
范例:定义一个类
package cn.zwb.vo; public class Dept { private Integer deptno; private String dname; public Dept(Integer deptno,String dname){ this.deptno=deptno; this.dname=dname; } @Override public String toString() { // TODO Auto-generated method stub return "部门编号:" + this.deptno + ",名称" +this.dname; } }
此时类中没有提供有无惨构造方法,所以配置在applicationContext.xml文件中的"<bean>"不能够正常使用,此时必须 明确调用类中的有参构造方法.
范例:application.xml配置
<bean id="dept" class="cn.zwb.vo.Dept"> <constructor-arg value="10"/> <constructor-arg value="开发部"/> </bean>
但是在Spring的配置里面它所支持的好处远远不止这一点.如果用户有需要也可以根据参数的索引来进行设置,
范例:修改索引操作
<bean id="dept" class="cn.zwb.vo.Dept"> <constructor-arg index="0" value="10"/> <constructor-arg index="1" value="开发部"/> </bean>
虽然Spring在构造方法上考虑的还是挺多的,但是从本质上并不推荐.
范例:修改Dept.java类设置参数名称
@ConstructorProperties(value={"paramDeptno","paramDname"}) public Dept(Integer deptno,String dname){ this.deptno=deptno; this.dname=dname; }
也就是说在设置的时候可以使用paramDeptno来代替索引0.使用paramDname来代替索引1.
范例:利用参数名称进行设置
<bean id="dept" class="cn.zwb.vo.Dept"> <constructor-arg name="paramDeptno" value="10"/> <constructor-arg name="paramDname" value="开发部"/> </bean>