spring的Ioc机制是掌握spring的重点。Spring的Ioc方式有三种,分别为 构造函数注入(type one)、
属性注入(type two)、
接口注入(type three)。
下面给出Demo代码及配置 案例。
程序结构图
环境是MyEclipse8.5WorkBench,Spring2.5&jdk1.6_5.
Esher.java是数据的实体类,包含name、school、general三个属性。
EsherInterceptor.java是接口类,forEsher是测试类。
applicationContext.xml是spring配置映射文件。
Type one - 构造函数注入
在Esher实体类中声明构造方法如下:
public Esher(String name,String general,String school){
this.name=name;
this.general=general;
this.school=school;
}
并在xml配置文件中配置bean属性映射注入便可。
<bean id="esher-type" class="org.yys.main.Esher">
<constructor-arg index="1">
<value>Esher</value>
</constructor-arg>
<constructor-arg>
<value>Male</value>
</constructor-arg>
<constructor-arg>
<value>SISE</value>
</constructor-arg>
</bean>
TypeTwo-属性方法注入
为了和构造方法注入
区别,在Esher.java中新增一个属性值为postId,自动省成器getter&setter方法,构造函数里不初始化postId的值。
属性注入的时候是调用Esher.java里面的setter方法对应注入,故如果改变setter方法的名字或者无setter方法,程序将会抛错。
并在xml里面配置bean里增加红色部分即可
<bean id="esher-type" class="org.yys.main.Esher">
<constructor-arg index="1">
<value>Esher</value>
</constructor-arg>
<constructor-arg>
<value>Male</value>
</constructor-arg>
<constructor-arg>
<value>
south china institute of software engineering
</value>
</constructor-arg>
<!--getter/setter注入-->
<property name="postId">
<value>510990</value>
</property>
</bean>
TypeThree-接口注入
在EsherInteceptor里面写入一个abstract的方法public abstract void proEsher();
并在forEsher.java里面实现这个接口打印出一些信息,并设置器getter/setter方法;
同时在xml配置下添加bean配置(原esher配置存在基础上)
<!--接口注入 -->
<!--配置实现类EsherImpl-->
<bean id="esher_implement" class="org.yys.main.forEsher"></bean>
<!--注入配置-->
<bean id="esher_interceptor" class="org.yys.main.forEsher">
<property name="esher_interceptor" ref="esher_implement"></property>
</bean>
下面是测试类的main方法
public static void main(String[] args){
Resource rs = new ClassPathResource("applicationContext.xml");
BeanFactory factory = new XmlBeanFactory(rs);
//构造函数注入
Esher esher = (Esher) factory.getBean("esher-type");
System.out.println(esher.getName());
System.out.println(esher.getGeneral());
System.out.println(esher.getSchool());
//getter/setter注入
System.out.println(esher.getPostId());
//接口注入
forEsher forE = (forEsher) factory.getBean("esher_interceptor");
forE.useEsher();
}
除了Ioc三种注入方式以外,还可利用BeanFactory的生命周期方法进行实例化前的注入方式,但这并不常用。方法如下:
首先写一个Bean,然后创建一个class继承BeanFactory生命中期中的BeanPostProcessor接口,并重写接口中的两个方法,代码如下:
public class MyBeanPostProcessorTool implements BeanPostProcessor{
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
// if(bean!=null&&beanName.equals("userBean")){ //可在Bean销毁前进行打印。
// UserBean user = (UserBean) bean;
// System.out.println("名称: "+user.getName());
// System.out.println("地址: "+user.getAddress());
// }
System.out.println(beanName+" has been destroyed");
return bean;
}
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
if(bean != null&&beanName.equals("userBean")){
UserBean user = (UserBean)bean;
user.setName("广州大学华软软件学院");
user.setAddress("广州广从大道13号");
}
System.out.println(beanName+" init done!");
return bean;
}
}
然后在xml托管这两个类:
<bean id = "userBean" class = "com.yys.domain.UserBean" ></bean>
<bean id = "myTool" class = "com.yys.domain.MyBeanPostProcessorTool" ></bean>
测试方法中只要get到Bean后直接打印对象属性值即可:
public static void main(String[] args){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
UserBean user = (UserBean) ac.getBean("userBean");
System.out.println("名称: "+user.getName());
System.out.println("地址: "+user.getAddress());
}
分享到:
相关推荐
Spring Ioc 注解 依赖注入
SpringIOC_泛型依赖注入,泛型依赖注入,注入一个组件的时候,他的泛型也是参考标准
spring IOC容器依赖注入XML配置详解 运行环境:eclipse 构建工具:maven 不提供maven构建,maven用来解决jar包的依赖
编程语言+JAVAspring+IoC容器+依赖注入**:这是一...它介绍了JAVAspring的IoC容器的概念、原理和作用,以及如何使用JAVAspring的IoC容器来实现依赖注入,包括设值注入和构造注入的方式,以及一些配置文件和注解的用法。
Spring 三种依赖注入方式.doc Spring 三种依赖注入方式.doc
详细讲解了springioc的各种注入方式以及对应的java方式。讲解了springioc和DI的区别,以及注入特殊复杂的属性
springIOC 小例子 附带源码 适合新手学习
spring ioc容器初始化流程图 spring ioc容器依赖注入流程图 spring aop实现原理流程图
其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的...
NULL 博文链接:https://samter.iteye.com/blog/408519
spring ioc开发最小依赖包4个,还包含两个辅助包commons-logging.jar和log4j.jar
spring ioc指的是控制反转,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。交由Spring容器统一进行管理,从而实现松耦合
以注解方式模拟Spring IoC AOP,了解Spring是如何实现的.
Spring IOC的注入方式总结 ,具体效果和过程看博文http://blog.csdn.net/evankaka/article/details/44832305
springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC...
spring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demo...
IoC 依赖注入 技术总结 IoC 依赖注入 技术总结
SpringIoc示例代码,SpringIoc示例代码,SpringIoc示例代码,SpringIoc示例代码
主要介绍了浅谈Spring IoC容器的依赖注入原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Spring IOC Annotation 注入 学习实例