spring 企业开发3.0 4
来源:互联网 发布:人工智能电影在线看 编辑:程序博客网 时间:2024/05/17 22:12
bean的注入方式
1,属性注入、构造函数注入、工厂方法注入
bean 的参数注入
字面值、引用其他的bean、内部bean、null值、级联属性、集合属性、
用p空间的来简化bean的配置方式
自动装配autowire (byname,bytype,constructor,)
方法的注入
无状态的bean的作用域一般为单列,如果在boss单列中注入prototype bean car,并希望每次调用时返回一个新的car,使用传统注入方式不能实现。如果想得到新的car,一种可选的方法就是让boss实现beanfactoryAware 接口,让boss能够访问容器的引用。这样boss的获取car的方法可以采用下面的方式 foctory。getbean(“car'”);但是这种方式绑定了框架。
lookup方法注入<bean id='magicclass' class='com.baoabotao.injectfun.MagicBoss'> <lookup-method name='gecar' bean='car'/> ,实现方式其实就是在srping动态运行期间为MagicBoas接口提供动态实现。
方法替换
public class Boss2 implements MethodReplacer{
public object reimplement(Object arg0,Method args1,Object[] args2){
CAR car = new Car();
}
}
<bean id="boss1" calss="com.baobaotao.injectfun.Boss1"> <replaced-method name="getcar" replacer="boss2">
<bean> 之间的关系
不但可以通过<ref> 引用另一个bean,建立bean与bean的依赖关系,相似的,<bean>元素标签之间可以建立类似的关系。继承、依赖、引用
bean的作用域
singleton作用域 ,传统开发下,dao类执有connection这个非线程安全的变量往往没有采用单列模式,在spirngI型啊,对于所有dao类都可以采用单列模式。因为
利用spirng 的 aop和localthread的功能。
web应用环境相关的bean作用域
request,session globalsesion, 使用前,首先必须在web容器中进行一些额外的配置。
在低版本的web容器(serlvet2.3之前),用户可以使用http请求过滤器进行配置
<web-app>
<filter>
< filter-name>requestContextFilter</fitler-name>
<filter-class>org.springframwork,web.filter,requestContextFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>requestContextFilter</filter-name>
<url-pattern>/*</url-parrtern>
<filter-mapping>
<web-app>
在高版本web中,则可以使用http请求监听进行配置
<web-app>
<listener><listener-class>org.springframwork,web.context.requet.requestContextListnner</listener>.....
细心的朋友可能问,在第3张中webappliactionContext初始化时,我们已经通过Contextloaderlistner (或ContextLoaderserlvet)将web容器与spring 容器整合,为什么在这里又要引入一个额外RequestContextList ener以支持bean的另外3哥作用域呢。通过分析两个监听器的源码,可以知道,serlvetContextListener只负责监听web 容器启动和关闭事件,而requestContextListener 监听http请求事件。
<bean name="car" class="com.baobaotao.scope.car" scope="request"><aop:scoped-proxy></bean>
<bean id="boss" class="com.baobao.tao.scope.boss"><property name="car" ref="car">我们
很容易知道配置文件中添加<aop :scoped-proxy>后,注入到boss bean中的car bean 已经不是原来的car ,而是car bean 的动态代理对象了。这个动态代理对象时car类的之类或car 的接口,spring在动态代理子类中加入了一段逻辑判断当前的boss需求取得哪个http请求相关的car bean 。 (动态代理所添加的逻辑其实也很简单),即判断当前boss位于哪个线程中。然后根据这个线程找到对应的httprequest,再从httprequest域中获取对应的car。因为web容器特性,一个http请求一般情况下对应一个独立线程。
factorybean
注意,要细心理解。一般情况下,spring通过反射机制利用<bean>的class属性指定实现实例化bean。在某些情况下, 实例化bean 的过程比较复杂,如果按照传统的方式,则要<bean>中提供大量的配置信息,配置方式的灵活性是受限制的,这时采用编码的方式可能会得到一个简单的方案。spring提供一个org.spirngframework.beans.factory.factorybean 工厂类接口,用户可以通过实现工厂接口定制实例化bean的逻辑。
从spring3.0开始,factorybean开始支持泛型,接口声明为Factorybean<T> .方法 T getObject 注意 是getobject而不是getbean(). 当配置文件中<bean>的class配置属性的实现类是factorybean时,通过getbean()方法返回的不是factorybean本身,而是 fatorybean.getObject()方法所返回的对象。相当于factorybean.getObejct()代理了getbean().
<bean id="car1" class="com.baobaotao.fb.carfactorybean p:carinfo="红旗CA72,200,20000.00"/>
如果用户希望得到carfactorybean自身,则需求在使用getbean(‘beanname’)方法时显示地在beanname前加上 "&" 前缀。getbean(“&car”)。
基于注解的配置。
spring 容器成功启动三大要件:bean的定义信息、bean的实现类、以及spirng自己。如果基于xml配置,bean定义信息和bean实现类本身是分离的。而采用基于注解的配置方式时,bean定义信息即通过在bean实现类上标注注解实现。
@Compoment
@Repository 对应dao实现类进行标注的
@service对应service实现类进行标注
@controller用于对controller实现类进行标注
使用注解配置信息启动spring容器
通过声明context命名空间。通过 context命名空间的component-scan的base-package属性指定一个需要扫描的基类包。如果仅希望扫描特定的类而非基包下的所有类。则可以使用resource-pattern属性过滤特定的类。
<context:componemnt-scan base-package="com.baobaotao" resource-pattern='anno/*.class'>
<context:compoment-scan base-package="com.baobaotao">
<context:include-filter type="regex" expression="com\.baobaotao\.anno.*">
<context:exclude-filter type"aspectj" expression="com.baobaotao..*cotroller+">
自动装配bean
@Autowinre进行自动注入。
@autowire的required属性,如果容器中没有一个和标注变量类似匹配的bean、容器启动时将报错。
@autowire @Qualifier
bean的注入 包括 定义id 、自动注入bean 、注入方法、注入参数、 注入生命周期方法,注入作用域
- spring 企业开发3.0 4
- Spring 2企业应用开发
- spring 3 企业开发 5
- spring 3企业开发 6
- Spring 3.x企业应用开发实战(4)----资源加载
- 企业开发框架NHibernate和Spring.Net
- .NET企业应用开发框架Spring.NET
- Spring 3.x 企业应用开发实战
- Spring 3.x企业应用开发实战
- Spring 3.x企业实用开发实战
- 企业开发框架NHibernate和Spring.Net简介
- 企业开发框架NHibernate和Spring.Net -1
- 企业开发框架NHibernate和Spring.Net -2
- 《轻量级J2EE企业应用实战--Struts+Spring+Hibernate整合开发》
- 精通Spring 2.x —— 企业应用开发详解
- Spring 3.x企业实用开发实战(1)
- Spring 3.x企业应用开发实战(6)----BeanFactory
- Spring 3.x企业应用开发实战(7)----ApplicationContext
- JSTL中的核心库
- LR杂记 - Linux系统监控工具之vmstat详解
- Android Socket 开发
- php深克隆和浅克隆
- windows下Eclipse操作MapReduce例子报错:Failed to set permissions of path: \tmp\hadoop-Jerome\mapred\staging\
- spring 企业开发3.0 4
- Delphi学习笔记 数据类型
- 混合三种背包问题(背包九讲)
- 首次启动优美新手指引tip
- windows和linux下开启mysql日志
- 实现高保真文件复制
- 成熟的男人
- 【nginx】nginx读书笔记
- 卖票系统同步问题