Spring属性注入

来源:互联网 发布:淘宝开网店书籍有用吗 编辑:程序博客网 时间:2024/04/27 20:18
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://www.springframework.org/schema/beans" 
xmlns:p="http://www.springframework.org/schema/p" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">


  <!-- 将User对象交给Spring管理 -->
<!-- Bean元素:使用该元素描述需要spring容器来管理
name:属性:给被管理的对象起个名字.获得对象时根据该名称获得对象,可以重复,可以使用特殊字符
class属性:指向对象的完整类名
id属性:与name一模一样,早年使用的是这个,名称不能重复,不能使用特殊字符
结论属性:尽量使用name属性
scope属性:singleton(默认值):单例对象,被标识为单例的对象在spring容器中只会存在一个实例
property:多例对象,被标识为多例的对象,每次获得才会创建,每次创建都是新的对象
(在整合struts2时,ActionBean需要配置成多例的)
request:web环境下,对象与request生命周期一直(了解)
session:web环境下,对象与session生命周期一直(了解)
-->

 <bean name="user" class="Bean.User" >
<!-- 属性注入
四种方式:set
构造函数
p名称空间注入(了解)
spel注入(了解)

set方式注入
ref是引用,值类型用value -->

 
<property name="name" value="tom" />
<property name="age" value="17" />
<property name="car" ref="car"></property>
</bean>

<bean name="car" class="Bean.Car">
<property name="name" value="来波"></property>
</bean> 

<!-- ========================构造函数注入================================= -->
<!-- index是索引,指的是构造函数属性在第一参数名为name的 ,type是指定的类型-->
<bean name="user1" class="Bean.User">
<constructor-arg name="name" value="jj" index="0" type="java.lang.String"/>
<constructor-arg name="age" value="14" index="1"/>
</bean>

<!-- ========================p名称空间注入================================= -->
<!-- 
首先要导入p名称命名空间
值类型p:属性值="值
对象类型p:属性名-ref=bean名称
-->

<bean name="user2" class="Bean.User" p:name="jack" p:age="14" p:car-ref="car">
</bean>

<!-- ========================spel入================================= -->
<!-- spring Expression language sping -->
<bean name="user4" class="Bean.User">
<property name="name" value="#{user.name}"></property>
<property name="age" value="#{user3.age}"></property>
<property name="car" ref="car"></property>
</bean>

<!-- ============复杂类型注入(数组)============== -->
<bean name="cb" class="Bean.User">
<!-- 如果数组中只准备一个值(对象),直接用value就可以 -->
<!-- <property name="arr" value="tom"></property> -->
<!-- array数组注入 ,多个元素注入-->
<property name="arr">
<array>
<value>tom</value>
<value>tom</value>
<ref bean="user"/>
</array>
</property>
</bean>


<!-- ============复杂类型注入(List)============== -->
<!-- 和数组类似.里面变成了list-->
<!-- <property name="list">
<list>
<value>tom</value>
<value>tom</value>
<ref bean="user"/>
</list>
</property> -->
 
 
<!-- ============复杂类型注入(Map)============== -->
<!-- 
<map>
<entry key="" value=""></entry>
<entry key="" value-ref=""></entry>
<entry key-ref="" value=""></entry>
</map>
-->
 <!-- ============复杂类型注入(properties)============== -->
<!-- <props>
<prop key="username">root</value>
<prop key="password">123456</value>
</props> -->

</beans>


===========================使用注解配置==================================

使用注解配置的话需要引入context约束

<!-- 指定扫描Bean包下的多有类的注解
注意:扫描包时,会扫描指定包下的所有子孙包
 -->
<context:component-scan base-package="Bean" />


然后在类上面加上注解

@Component("user")
//相当于是<bean name="user" class="BeanUser">

@Controller//web层
@Service//service层
@Repository//dao层,

这几个注解作用都是一样的,知识为了区分不同的层而已.

//指定对象的作用范围
@Scope(scopeName="prototype")默认是singleton






@Component("user")
//相当于是<bean name="user" class="BeanUser">
@Controller//web层
@Service//service层
@Repository//dao层
//指定对象的作用范围
@Scope(scopeName="prototype")//默认是singleton
public class User {
@Value("tom")//把值注入到name属性中,放到set方法上也是可以的
private String name;
private int age;
//注入对象
@Autowired
//自动装配,,注意,如果匹配多个类型一致的对象,将无法选择具体注入哪一个对象
@Qualifier("car2")//使用这个注解告诉spring容器自动装配那个名称的对象
@Resource(name="car")//手动注入,指定注入那个名称的对象
private Car car;

原创粉丝点击