您的位置:首页 > 编程语言 > Java开发

Spring 中属性注入的方法(实战应用)

2018-03-12 15:19 387 查看
Spring的控制反转与属性注入特性可以极大的帮我们管理所需要的对象。
spring的注解和使用

第一部分:bean的实例化(声明一个bean),让bean交给Spring管理,即我们所说Spring特性之IOC控制反转

平时我们主要使用<bean/>标签来定义,接下来有三种方式:
1. 普通实例bean<bean id="testAction" class="com.test.mytest.testAction" />2.普通实例化接口
<bean id="testService" class="com.test.mytest.service.impl.testServiceImpl" />3.通过静态工厂,实例化工厂创建(不推荐)
<bean id="bean2" class="cn.ywq.bean.Bean2Factory" factory-method="getBean2"></bean>public class Bean2Factory {  
  
    //静态的方法,返回Bean2对象  
    public static Bean2 getBean2() {  
        return new Bean2();  
    }  
}  
4.使用实例工厂来创建(亦然不推荐)
public class Bean3Factory {  
  
    //普通的方法,返回Bean3对象  
    public Bean3 getBean3() {  
        return new Bean3();  
    }  
}  
<bean id="bean3Factory" class="cn.ywq.bean.Bean3Factory"></bean>
<bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"></bean>

注意:bean设计有一些规定:

Bean标签的常用属性:

(1)id属性:规范!!! 类名首字母小写!!
(2)class属性:全限定名(所在类的全路径)

(3)name属性(默认不使用):功能和id属性一样的,id属性值不能包含特殊符号,但是在name属性值里面可以包含特殊符号
(4)scope属性
- singleton:默认值,单例
- prototype:多例
 - request:创建对象把对象放到request域里面
- session:创建对象把对象放到session域里面
- globalSession:创建对象把对象放到globalSession里面

第二部分:注入属性(让Spring在初始化的时候为你的类注入值),即我们所说的Spring第二大特性:依赖注入 DI

属性注入的方式介绍(三种方式)
(1)使用set方法注入
(2)使用有参数构造注入
(3)使用接口注入

1)第一种方法使用set方法注入,标准的类都必须满足setter,getter方法,由于Spring的DI底层采用的类的setter方法,所以使用该方法注入的类的属性,必须实现setter方法。
1.1 普通属性注入
<bean id="testAction"
class="com.test.mytest.testAction">
<property name="testUrl" value="www.baidu.com" />
<property name="systemEnv" value="test"/>
</bean><bean id="testService"
class="com.test.mytest.service.impl.testServiceImpl">
<property name="testUrl" value="${test_url}" />
<property name="systemEnv" value="${system_env}"/>
</bean>读者请看前者是实例类,他采用的是实例化后采用直接注入,后者是采用接口实例化 采用EL表达式注入。
1.2 采用引用方式注入<bean id="testEngine" class="com.test.impl.testEngineImpl" >
<property name="userService" ref="userService"/>
<property name="orderService" ref="orderService"/>
</bean>读者注意, 上接口采用的引用方式注入 userService和orderService必须也先用bean标签声明!才可引入
1.3 复杂属性的注入(List,Map类型的注入)
<bean id="testPropertyBuilderFactory" class="com.test.testPropertyBuilderFactory" >
<property name="builders">
<map>
<entry key="user" value-ref="userPropertyBuilder" />
<entry key="order" value-ref="orderPropertyBuilder" />
<entry key="product" value-ref="productPropertyBuilder" />
</map>
</property>
</bean>
<bean id="orderInterceptorProxyCreator"
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="interceptorNames">
<list>
<value>orderInterceptor</value>
</list>
</property>
<property name="beanNames">
<list>
<value>orderService</value>
<value>userService</value>
</list>
</property>
</bean>
上述就是复杂对象的注入。
spring的注解和使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息