首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

spring日志(三):在Ioc中装配Bean

2013-04-21 
spring日记(三):在Ioc中装配Bean循环依赖问题:如果两个Bean都通过构造函数注入,并且在构造函数中互相引用

spring日记(三):在Ioc中装配Bean

循环依赖问题:如果两个Bean都通过构造函数注入,并且在构造函数中互相引用对方,那么会出现死锁情况,这种情况下,只能修改构造函数注入方法,改成属性输入。

注入参数详解:

一般来讲,基本数据类型及其封装类、String等类型可以采用字面值注入,就是<value>元素,Spring容器在内部为字面值提供了编辑器,可以将字符串表示的字面值转换为内部变量的相应类型。spring允许用户注册自定义的编辑器,以处理其他类型属性注入时的转换工作。

看到了那个brand属性的字面值没?那是一个特殊的XML符号,<![CDATA[....]]>的作用是让解析器将里面的东东当做普通文本对待,不要解析了,不过这个只能用在<value></value>元素中,如果是直接用简化方式,比如<property name="speed", value="aaa&amp;bb">,只能用后面的转移字符了。或者使用特殊实体符号:<(&lt;)、>(&gt;)&(&amp;)、"(&quot;)、'(&apos;),注意,value里面的空格会连带一起付给这个属性,所以最好不要加空格换行啥的。

现在最优雅的配置方式是使用p命名空间:

lookup方法注入(CGLib实现):

适用场景为希望通过一个singleton Bean 获取一个prototype Bean的时候,每次调用方法获取的对象都不一样:

》基于注解的配置:

@Component、@Repository(对DAO)、@Service、@Controller标注POJO类,然后在spring配置文件中引入context命名空间,pom中引入对于的jar包依赖,然后开始扫描:

所有这些过滤中,aspectj的过滤表达能力最强,它可以轻易实现其他类型所能表达的过滤规则。》使用@Autowired进行自动注入package com.baobaotao.anno; import org.springframework.beans.factory.BeanNameAware;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.stereotype.Service; @Servicepublic class LogonService implements BeanNameAware{    @Autowired(required=false)    private LogDao logDao;    @Autowired    @Qualifier("userDao")    private UserDao userDao;}

一般原则:采用XML配置DataSource、SessionFactory等资源Bean,在XML中利用aop、context命名空间进行相关主题的配置。其他所有项目中开发的Bean,都通过基于注解配置的方式进行配置,即整个项目采用“基于XML+基于注解”的配置方式,很少采用基于Java类的配置方式。

热点排行