- 浏览: 449912 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
鱼里的yeol:
正在学习EJB 感觉有些吃力
Ejb3学习之二----Ejb3的Ejb Bean类型介绍 -
phoenix5870:
默认就是singleton的。
Spring中的Singleton模式和Java中的Singleton模式 -
jhys7s8jd:
pdf打印机下载 无水印http://www.onlinedo ...
PDFCreate工具的使用 -
wang371134086:
:e vil:
浅谈Struts2中的拦截器实现责任链模式 -
liu765023051:
亲,local与remote有什么区别呢
EJB学习之三---Local和Remote接口
Key points
依赖注入的原理
依赖注入的方式---XML配置
依赖注入的方式---注解的方式
Java包装类的注入
Collection的注入
学习Spring 它的核心就是IOC和AOP。而IOC中实现Bean注入的实现方式之一就是DI(依赖注入)。
一 DI的原理
DI的基本原理:对象之间的依赖关系只会通过三种方式:构造函数参数,工厂方法的参数以及构造函数或工厂方法创建的对象属性设置。因此,容器的工作哦就是在创建Bean时注入所有的依赖关系。相对于由Bean自己控制其实例化,直接在构造器中指定依赖关系或者类似服务定位器(Service Locator)这三种自主控制依赖关系注入的方法,而控制权从根本上发生改变,即控制反转(Inverse of Controll)---IOC.
应用DI规则后,我们不用在关注对象之间的依赖关系,从而达到高层次的松耦合。DI有两种实现方式---Setter/getter方式(传值方式)和构造器方式(引用方式)。
下面就从XML配置和注解角度来介绍这两种方式。
二 DI的方式---XML配置
1. Setter/getter方法
下面是一个Sample:
1) beans.xml:
2) PersonService.java
3) PersonServiceBean.java
4) PersonDao.java
5) PersonDaoImpl.java
6) SpringTest.java(测试类)
Console出现的Log:
在这里,是采用一种外部注入的方式,我们还可以采用内部注入的方式来处理:
Beans.xml修改如下:
2. 构造器注入
以下是一个Sample:
1) Beans.xml:
2) PersonService.java:同Setter方法注入
3) PersonServiceBean.java
}
4) PersonDao.java:同Setter方法注入
5) PersonDaoImpl.java:同Setter方法注入
6) 测试类(SpringTest.java):同上
Console出现的Log:
三 DI的方式---注解的配置
自从Jdk5中引入Annotation类后,在EJB和Spring中得到广泛的使用,也越来越被开发者们在平时的应用中使用。主要是用在Field上的注入。在日常的应用开发中,一个项目中有很多的bean,如果使用XML文件配置,就会导致配置文件难以管理。使用注解注入的时候,能够使bean的配置文件内容不至于繁杂。
首先介绍下注解的两种方式:@Resource(javax.annotation.Resource)和@Autowired.
@Resource:首先按照名称去寻找当前的bean,如果找不到的话,那就以类型装配。
@Autowired:首先按照类型去寻找当前的bean, 如果找不到的话,那就以名称装配。
1. Resource
下面介绍一个Sample:
1) Beans.xml:
2) PersonService.java:同上。
3) PersonServiceBean.java
4) PersonDao.java:同上
5) PersonDaoService.java:同上
6) SpringTest.java:同上
2. Autowired
下面介绍一个Sample:
1) Beans.xml:
2) PersonService.java:同上。
3) PersonServiceBean.java
}
4) PersonDao.java:同上
5) PersonDaoService.java:同上
6) SpringTest.java:同上
Noted:所有的注解可以使用在Field上,也可以使用到Setter方法上,最后结果都是一样的。
四 Java基本类型的注入
Java基本类型的注解可以参考二.2
在beans.xml中配置如下:
五 Collection的注入
Collection的注入分为以下两步:
1. Beans.xml:
2. SpringTest.java:
依赖注入的原理
依赖注入的方式---XML配置
依赖注入的方式---注解的方式
Java包装类的注入
Collection的注入
学习Spring 它的核心就是IOC和AOP。而IOC中实现Bean注入的实现方式之一就是DI(依赖注入)。
一 DI的原理
DI的基本原理:对象之间的依赖关系只会通过三种方式:构造函数参数,工厂方法的参数以及构造函数或工厂方法创建的对象属性设置。因此,容器的工作哦就是在创建Bean时注入所有的依赖关系。相对于由Bean自己控制其实例化,直接在构造器中指定依赖关系或者类似服务定位器(Service Locator)这三种自主控制依赖关系注入的方法,而控制权从根本上发生改变,即控制反转(Inverse of Controll)---IOC.
应用DI规则后,我们不用在关注对象之间的依赖关系,从而达到高层次的松耦合。DI有两种实现方式---Setter/getter方式(传值方式)和构造器方式(引用方式)。
下面就从XML配置和注解角度来介绍这两种方式。
二 DI的方式---XML配置
1. Setter/getter方法
下面是一个Sample:
1) beans.xml:
<bean id="personDao" class="com.spring.dao.impl.PersonDaoImpl"></bean> <bean id="personService" class="com.spring.service.impl.PersonServiceBean" scope="singleton" > <property name=”personDao” ref=”personDao”/> </bean>
2) PersonService.java
public interface PersonService { public void save(); }
3) PersonServiceBean.java
public class PersonServiceBean implements PersonService{ //all 需要注入的bean都在这里处理 private PersonDao personDao; public PersonServiceBean(){ System.out.println("personServiceBean.constructor() is running."); } /** * 使用getter/setter方法注入 * @return the personDao */ public PersonDao getPersonDao() { return personDao; } /** * @param personDao the personDao to set */ //使用注解注入到setter方法上,等同于注解注入到Field上。 //@Resource public void setPersonDao(PersonDao personDao) { this.personDao = personDao; } public void save(){ System.out.println("Name:" +name); personDao.add(); } @PostConstruct public void init(){ System.out.println("PersonServiceBean.init() is running."); } @PreDestroy public void destory(){ System.out.println("PersonServiceBean.destory() is running."); } }
4) PersonDao.java
public interface PersonDao { public void add(); }
5) PersonDaoImpl.java
public class PersonDaoImpl implements PersonDao { public void add(){ System.out.println("PersonDao.add() is running."); } }
6) SpringTest.java(测试类)
public class SpringTest { /** * @throws java.lang.Exception */ @BeforeClass public static void setUpBeforeClass() throws Exception { } @Test public void instanceSpring(){ AbstractApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); PersonService personService = (PersonService)context.getBean("personService"); personService.save(); /** * call destroy() */ context.close(); } }
Console出现的Log:
personServiceBean.constructor() is running. PersonServiceBean.init() is running. Name:null PersonDao.add() is running.
在这里,是采用一种外部注入的方式,我们还可以采用内部注入的方式来处理:
Beans.xml修改如下:
<bean id="personService" class="com.spring.service.impl.PersonServiceBean" scope="singleton" > <property name="personDao"> <bean class="com.spring.dao.impl.PersonDaoImpl"/> </property> </bean>
2. 构造器注入
以下是一个Sample:
1) Beans.xml:
<bean id="personDao" class="com.spring.dao.impl.PersonDaoImpl"></bean> <bean id="personService" class="com.spring.service.impl.PersonServiceBean" scope="singleton" > <!—使用构造函数注入--> <constructor-arg index="0" type="com.spring.dao.PersonDao" ref="personDao"/> <constructor-arg index="1" value="Jamson" /> </bean>
2) PersonService.java:同Setter方法注入
3) PersonServiceBean.java
public class PersonServiceBean implements PersonService{ //all 需要注入的bean都在这里处理 //使用注解方式注入,首先按名称查找,然后是按照类型查找 //@Resource(name="personDao") // @Autowired private PersonDao personDao; public String name; public PersonServiceBean(){ System.out.println("personServiceBean.constructor() is running."); } /** * 使用构造器注入 * @param personDao * @param name */ public PersonServiceBean(PersonDao personDao, String name) { this.personDao = personDao; this.name = name; } // /** // * 使用getter/setter方法注入 // * @return the personDao // */ // public PersonDao getPersonDao() { // return personDao; // } // // /** // * @param personDao the personDao to set // */ // //使用注解注入到setter方法上,等同于注解注入到Field上。 // //@Resource // public void setPersonDao(PersonDao personDao) { // this.personDao = personDao; // } public void save(){ System.out.println("Name:" +name); personDao.add(); } @PostConstruct public void init(){ System.out.println("PersonServiceBean.init() is running."); } @PreDestroy public void destory(){ System.out.println("PersonServiceBean.destory() is running."); } // /** // * @return the name // */ // public String getName() { // return name; // } // // /** // * @param name the name to set // */ // public void setName(String name) { // this.name = name; // }
}
4) PersonDao.java:同Setter方法注入
5) PersonDaoImpl.java:同Setter方法注入
6) 测试类(SpringTest.java):同上
Console出现的Log:
PersonServiceBean.init() is running. Name:Jamson PersonDao.add() is running.
三 DI的方式---注解的配置
自从Jdk5中引入Annotation类后,在EJB和Spring中得到广泛的使用,也越来越被开发者们在平时的应用中使用。主要是用在Field上的注入。在日常的应用开发中,一个项目中有很多的bean,如果使用XML文件配置,就会导致配置文件难以管理。使用注解注入的时候,能够使bean的配置文件内容不至于繁杂。
首先介绍下注解的两种方式:@Resource(javax.annotation.Resource)和@Autowired.
@Resource:首先按照名称去寻找当前的bean,如果找不到的话,那就以类型装配。
@Autowired:首先按照类型去寻找当前的bean, 如果找不到的话,那就以名称装配。
1. Resource
下面介绍一个Sample:
1) Beans.xml:
<bean id="personDao" class="com.spring.dao.impl.PersonDaoImpl"></bean> <bean id="personService" class="com.spring.service.impl.PersonServiceBean" scope="singleton" init-method="init" destroy-method="destory" >
2) PersonService.java:同上。
3) PersonServiceBean.java
public class PersonServiceBean implements PersonService{ //all 需要注入的bean都在这里处理 //使用注解方式注入,首先按名称查找,然后是按照类型查找 @Resource(name="personDao") private PersonDao personDao; public String name="Jamson"; public PersonServiceBean(){ System.out.println("personServiceBean.constructor() is running."); } /** * 使用构造器注入 * @param personDao * @param name */ public PersonServiceBean(PersonDao personDao, String name) { this.personDao = personDao; this.name = name; } // /** // * 使用getter/setter方法注入 // * @return the personDao // */ // public PersonDao getPersonDao() { // return personDao; // } /** * @param personDao the personDao to set */ //使用注解注入到setter方法上,等同于注解注入到Field上。 // @Resource // public void setPersonDao(PersonDao personDao) { // this.personDao = personDao; // } public void save(){ System.out.println("Name:" +name); personDao.add(); } @PostConstruct public void init(){ System.out.println("PersonServiceBean.init() is running."); } @PreDestroy public void destory(){ System.out.println("PersonServiceBean.destory() is running."); } }
4) PersonDao.java:同上
5) PersonDaoService.java:同上
6) SpringTest.java:同上
2. Autowired
下面介绍一个Sample:
1) Beans.xml:
<bean id="personDao" class="com.spring.dao.impl.PersonDaoImpl"></bean> <bean id="personService" class="com.spring.service.impl.PersonServiceBean" scope="singleton" init-method="init" destroy-method="destory" >
2) PersonService.java:同上。
3) PersonServiceBean.java
public class PersonServiceBean implements PersonService{ //all 需要注入的bean都在这里处理 //使用注解方式注入,首先按名称查找,然后是按照类型查找 @Autowired private PersonDao personDao; public String name="Jamson"; public PersonServiceBean(){ System.out.println("personServiceBean.constructor() is running."); } /** * 使用构造器注入 * @param personDao * @param name */ //public PersonServiceBean(PersonDao personDao, String name) { //this.personDao = personDao; //this.name = name; //} /** * 使用getter/setter方法注入 * @return the personDao */ public PersonDao getPersonDao() { return personDao; } /** * @param personDao the personDao to set */ //使用注解注入到setter方法上,等同于注解注入到Field上。 // @Resource public void setPersonDao(PersonDao personDao) { this.personDao = personDao; } public void save(){ System.out.println("Name:" +name); personDao.add(); } @PostConstruct public void init(){ System.out.println("PersonServiceBean.init() is running."); } @PreDestroy public void destory(){ System.out.println("PersonServiceBean.destory() is running."); }
}
4) PersonDao.java:同上
5) PersonDaoService.java:同上
6) SpringTest.java:同上
Noted:所有的注解可以使用在Field上,也可以使用到Setter方法上,最后结果都是一样的。
四 Java基本类型的注入
Java基本类型的注解可以参考二.2
在beans.xml中配置如下:
<property name="name" value="Jamson"></property>
五 Collection的注入
Collection的注入分为以下两步:
1. Beans.xml:
<property name="sets"> <set> <value>set_1</value> <value>set_2</value> </set> </property> <property name="lists"> <list> <value>list_1</value> <value>list_2</value> </list> </property> <property name="properties"> <props> <prop key="key_1">value_1</prop> <prop key="key_2">value_2</prop> </props> </property> <property name="maps"> <map> <entry key="map_1" value="value-1"/> <entry key="map_2" value="value-2"/> </map> </property>
2. SpringTest.java:
System.out.println("============Set is Starting==========="); for(String value : personService.getSets()){ System.out.println(value); } System.out.println("============List is Starting==========="); for(String value: personService.getLists()){ System.out.println(value); } System.out.println("============Properties is Starting==========="); for(Object key: personService.getProperties().keySet()){ System.out.println(key +"="+ personService.getProperties().getProperty((String)key)); } System.out.println("============Map is Starting==========="); for(String key: personService.getMaps().keySet()){ System.out.println(key +"="+ personService.getMaps().get(key)); }
发表评论
-
OS Workflow Intruction
2011-03-14 01:58 1680OSWorkflow是一个灵活的工作流引擎,设计成可嵌入到企业 ... -
EJB学习之五---MDB(消息驱动EJB)
2010-09-06 13:32 2309前面已经介绍过EJB的Session Bean,这篇文章主要介 ... -
SSL单双向验证原理(转)
2010-06-07 22:34 2931Key points SSL验证 双向SSL ... -
Spring2.5学习之三----AOP研究
2010-05-31 12:09 6511Key Points AOP的基本概念 Advice的类型 A ... -
Spring学习之一----创建Bean的三种方法
2010-05-30 14:29 27721关键字 BeanFactory ApplicationCont ... -
EJB3学习之四----EJB3新特性(元数据注解和依赖注入)
2010-05-13 01:39 4178EJB3新特性 元数据注解 依赖注入 一 EJB3新特性 ... -
Ejb3学习之二----Ejb3的Ejb Bean类型介绍
2010-05-11 23:01 3285关于Ejb3的Ejb bean类型介 ... -
EJB学习之三---Local和Remote接口
2010-05-10 23:12 8312这篇文章主要来学习Ejb的组成元素,重点介绍Local和Rem ... -
Ejb学习之一---EJB3+Jboss4.2配置开发
2010-05-09 02:59 2898昨天,打算把Ejb整理下,最早用到Ejb+Jboss是在三年前 ... -
Struts Taglib库之(一)Bean讲解
2010-05-05 23:29 0最近准备换工作,也想把一些工作中用到的技术进行链接起来,就把它 ... -
转:Hibernate中cascade和inverse的相关
2011-11-19 17:51 680FROM:http://developer.51cto.com ... -
Struts1和Struts2有何不同?
2010-04-19 00:42 0Struts1和Struts2的区别和对比: Action ... -
Struts2中的Vistor模式
2010-04-19 00:40 1557Visitor访问者模式定义 作用于某个对象群中各个对象的操作 ... -
Spring中的Singleton模式和Prototype模式
2010-04-19 00:06 1832对于在Spring+Struts2结合配置Action=&qu ... -
WebService介绍
2010-04-18 17:01 2981记得初次接触WebService是 ... -
Spring中的Singleton模式和Java中的Singleton模式
2010-04-17 17:09 12694对于Spring中实现Singleton模式,是以IOC容器为 ... -
JavaMail来读取和发送邮件的基本流程
2010-04-15 01:21 1943在应用程序中使用JavaMail来读取邮件的基本流程如下: ... -
SSH框架优缺点【转】
2010-04-15 00:53 6175在过去的一年里,可能 ... -
J2EE面试题
2010-04-14 11:17 0一、基础问答 1.下 ... -
JTOM
2010-04-13 00:24 0JTOM是一个基于Java开放源代码的事物处理管理器。它遵 ...
相关推荐
2.5版本引入了一些重要的增强,如依赖注入(Dependency Injection,DI)的改进,使得组件之间的依赖关系更加明确,降低了代码间的耦合度。DI通过容器管理对象的生命周期,允许开发者在不修改代码的情况下更换或升级...
2.5版本是Spring发展过程中的一个重要阶段,它增强了对依赖注入(Dependency Injection,DI)的支持,这是Spring的核心功能之一。依赖注入允许开发者在运行时通过容器来管理对象及其依赖关系,提高了代码的可测试性...
综上所述,"spring 2.5依赖包"包含了实现上述功能所需的所有jar文件,如spring-context、spring-beans、spring-aop、spring-web等模块,确保了开发者能够充分利用Spring 2.5提供的特性来构建高效、可维护的企业级...
Spring的核心特性之一是依赖注入(Dependency Injection,简称DI),也被称为控制反转(Inversion of Control,IoC)。DI允许开发者声明他们所需的依赖关系,而无需手动创建对象或管理这些依赖关系。通过配置文件或...
这个"Spring2.5-中文参考手册chm.zip"文件包含了关于Spring 2.5版本的详细中文指南,对于学习和理解Spring框架具有很高的价值。 Spring框架的核心特性包括依赖注入(Dependency Injection,DI)、面向切面编程...
1. **依赖注入(Dependency Injection, DI)**:Spring的核心特性之一,允许对象之间的依赖关系在运行时由框架动态管理。通过DI,开发者可以降低代码间的耦合度,提高组件的可测试性和可维护性。 2. **AOP(面向切...
1. **依赖注入(DI)增强**:在Spring 2.5中,依赖注入进一步加强,支持了基于注解的配置。开发者可以使用`@Autowired`、`@Qualifier`和`@Resource`等注解来简化装配过程,无需编写XML配置文件。 2. **注解驱动的开发...
首先,Spring 2.5对依赖注入(Dependency Injection,DI)进行了优化,使得配置更加简洁和灵活。XML配置文件中的注解支持得以增强,开发者可以更方便地使用注解来声明和管理Bean。此外,引入了基于Java配置的功能,...
1. **依赖注入(Dependency Injection, DI)**:Spring 2.5中的DI是其核心功能之一,允许开发者在运行时将依赖关系注入到对象中,而不是硬编码这些依赖。通过XML配置或注解,可以轻松地管理类之间的依赖关系,提高代码...
Spring2.5版本是其发展的一个重要里程碑,引入了许多改进和新特性,使得开发者能够更加方便地进行依赖注入、事务管理、AOP(面向切面编程)等关键功能的实现。 在Spring框架中,依赖注入(Dependency Injection,...
Spring的核心特性之一就是依赖注入,它允许对象之间的依赖关系在运行时由容器管理,而不是硬编码在类内部。在Spring 2.5中,DI的实现更加完善,支持了注解驱动的依赖注入,使得代码更简洁、更易于测试。 2. **注解...
根据提供的信息来看,这份文档是关于Spring 2.5版本的...综上所述,Spring 2.5参考手册涵盖了Spring框架的核心特性和新功能,并提供了详细的配置指南和最佳实践建议,是Java开发者学习和使用Spring框架的重要参考资料。
在压缩包"spring2.5需要的jar"中,可能包含了一系列Spring框架的核心库,如spring-core、spring-context、spring-aop、spring-beans、spring-expression等。这些jar文件是构建基于Spring 2.5的应用所必需的,它们...
Spring2.5在这方面进行了优化,增强了对JSR-330标准的支持,如`@Inject`注解,使得依赖注入更加简单和标准化。 其次,Spring2.5在AOP(面向切面编程)方面也有所加强。AOP是Spring用于实现横切关注点,如日志、事务...
通过阅读《Spring2.5-中文参考手册.chm》这份文档,开发者可以深入了解Spring 2.5的各种特性和用法,解决实际开发中遇到的问题,提升开发效率。文档不仅包含详细的API参考,还包含丰富的示例和最佳实践指导,是学习...
依赖注入(Inversion of Control, IoC)是Spring框架的核心特性之一,它通过将对象间的依赖关系交由外部容器管理来实现松耦合。在Spring2.5中,IoC容器支持通过XML配置文件或注解的方式定义和管理Bean之间的依赖关系...
1. **依赖注入增强**:Spring 2.5对依赖注入进行了优化,支持了基于注解的配置,使得开发者可以更方便地在类的字段或方法上使用`@Autowired`、`@Qualifier`等注解来声明依赖,减少了XML配置的复杂性。 2. **JSR-303...
这样,业务逻辑、控制逻辑和持久化操作就通过Spring的依赖注入相互关联。 6. 测试:编写测试用例,验证整合后的系统是否能正常运行,包括Action的跳转、数据的存取等。 这个过程中可能会遇到的挑战包括:配置文件...