Spring的Bean管理(XML方式):
<!--开启注解扫描=======================-->
<context:component-scan base-package="com.imooc"/>
Bean的作用域:
例:
Spring容器中Bean生命周期的配置
Bean的完整生命周期:
Spring的属性注入:
对于类成员变量,注入方式有三种
–构造函数注入
–属性setter方法注入
–接口注入
Spring支持前两种
构造方法的属性注入:
<bean id="user" class="com.imooc.ioc.demo4.User">
<constructor-arg name="name" value="张三" />
<constructor-arg name="age" value="23"/>
</bean>
set方法的属性注入:
<bean id="person" class="com.imooc.ioc.demo4.Person">
<property name="name" value="李四"/>
<property name="age" value="32"/>
<--实体类-->
<property name="cat" ref="cat"/>
</bean>
<--实体类-->
<bean id="cat" class="com.imooc.ioc.demo4.Cat">
<property name="name" value="ketty"/>
</bean>
实际开发中更习惯于使用set方法注入
Bean的p名称空间的属性注入:
<!--Bean的p名称空间的属性注入==============================-->
<bean id="person" class="com.imooc.ioc.demo4.Person" p:name="大黄" p:age="34" p:cat-ref="cat"/>
<bean id="cat" class="com.imooc.ioc.demo4.Cat" p:name="小黄"/>
Spring的属性注入-SpEL注入
` <!--Bean的SpEL的属性注入==============================-->
<bean id="category" class="com.imooc.ioc.demo4.Category">
<property name="name" value="#{'服装'}"/>
</bean>
<bean id="productInfo" class="com.imooc.ioc.demo4.ProductInfo"/>
<bean id="product" class="com.imooc.ioc.demo4.Product">
<property name="name" value="#{'男装'}"/>
<property name="price" value="#{productInfo.calculatePrice()}"/>
<property name="category" value="#{category}"/>
</bean>`
public class ProductInfo {
public Double calculatePrice(){
return Math.random() * 199;
}
}
复杂类型的属性注入
<!--集合类型的属性注入=================================-->
<bean id="collectionBean" class="com.imooc.ioc.demo5.CollectionBean">
<!--数组类型-->
<property name="arrs">
<list>
<value>aaa</value>
<value>bbb</value>
<value>ccc</value>
</list>
</property>
<!--List集合的属性注入-->
<property name="list">
<list>
<value>111</value>
<value>222</value>
<value>333</value>
</list>
</property>
<!--Set集合的属性注入-->
<property name="set">
<set>
<value>ddd</value>
<value>eee</value>
<value>fff</value>
</set>
</property>
<!--Map集合的属性注入-->
<property name="map">
<map>
<entry key="aaa" value="111"/>
<entry key="bbb" value="222"/>
<entry key="ccc" value="333"/>
</map>
</property>
<!--Properties的属性注入-->
<property name="properties">
<props>
<prop key="username">root</prop>
<prop key="password">1234</prop>
</props>
</property>
</bean>
Spring的Bean管理(注解方式):
传统方式需要去XML中配置
另外还有一个@Resource注解
Spring提供对JSR25中定义@Resource标准注解的支持
@Resource 相当于@Autowired+@Qualifier 和@Autowired注解功能相似但也会强制按照名称去注入
XML和注解整合开发
<context:component-scan base-package=“com.imooc”/>:包扫描
context:annotation-config/:单独使用属性注入注解,开启包扫描的时候,这个也会同时被开启。
例:纯XML方式
public class ProductService {
private CategoryDao categoryDao;
private ProductDao productDao;
}
XML:
<bean id="productService" class="com.imooc.demo3.ProductService">
<property name="productDao" ref="productDao"/>
<property name="categoryDao" ref="categoryDao"/>
</bean>
<bean id="productDao" class="com.imooc.demo3.ProductDao"/>
<bean id="categoryDao" class="com.imooc.demo3.CategoryDao"/>
整合开发: XML只管理类,属性注入使用注解方式
public class ProductService {
@Resource(name="categoryDao")
private CategoryDao categoryDao;
@Resource(name="productDao")
private ProductDao productDao;
}
XML:
<bean id="productService" class="com.imooc.demo3.ProductService">
</bean>
<bean id="productDao" class="com.imooc.demo3.ProductDao"/>
<bean id="categoryDao" class="com.imooc.demo3.CategoryDao"/>