ApplicationContext.xml配置文件
bean标签属性
1) 对象创建,单利/多利
- scope=”singleton” 默认值,默认为单利,【service/dao/工具类】
- scope=”prototype” 多利 【action对象】
2)对象创建时期
- scope=”singleton” 在启动(容器初始化之前),就已经创建号bean,而且只有一个
- scope=”prototype” 在用到对象的时候,才创建
3)延迟创建
- lazy-init=”false” 默认为false,不延迟创建,即在启动时间的对象在启动的时候创建
- lazy-init=”true” 延迟初始化,在使用对象的时候才创建,只对单利又影响
4)创建对象之后,初始化/销毁
- init-method=”方法名” 【对应对象的init_user方法,在对象创建之后执行】
- destroy-method=”destroy” 【在调用容器对象的destroy的方法执行,容器必须是实现类(ClassPathXMLApplicationContext),而不是接口(ApplicationContext)】
SprintIOC容器
创建对象,使用XML文件的创建方式
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation=
"http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 无参构造器 -->
<bean id="user1" class="cn.itcast.b_create_obj.User" ></bean>
<!-- 定义一个字符串,值是JackSpry -->
<bean id="str" class="java.lang.String">
<constructor-arg value="JackSpry"></constructor-arg>
</bean>
<!-- 带参构造器 -->
<bean id="user2" class="cn.itcast.b_create_obj.User">
<constructor-arg value="100" index="0" type="int"></constructor-arg>
<constructor-arg index="1" type="java.lang.String" ref="str"></constructor-arg>
</bean>
<!-- 工厂类创建对象 -->
<!-- 工厂类,实例方法 -->
<!-- 先创建工厂 -->
<bean id="factory" class="cn.itcast.b_create_obj.UserFactory"></bean>
<!-- 在创建user对象,用factory的实例方法 -->
<bean id="user3" factory-bean="factory" factory-method="getInstance"></bean>
<!-- 工厂类,静态方法 -->
<bean id="user" class="cn.itcast.b_create_obj.UserFactory" factory-method="getStaticInstance"></bean>
</beans>
public class App {
@Test
public void testIOC() throws Exception {
ApplicationContext ac=new ClassPathXmlApplicationContext("cn/itcast/b_create_obj/bean.xml");
User user = (User)ac.getBean("user");
System.out.println(user);
}
}
处理对象之间的依赖关系
给属性赋值
- 通过构造函数
通过set方法
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation= "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--######### 给对象的属性赋值 #########--> <!-- 1)通过构造函数 --> <bean id="user1" class="cn.itcast.c_property.User"> <constructor-arg index="0" value="100"></constructor-arg> <constructor-arg index="1" value="Tom"></constructor-arg> </bean> <!-- 2)通过set方法属性注入值 --> <bean id="user2" class="cn.itcast.c_property.User"> <property name="id" value="11"></property> <property name="name" value="hello"></property> </bean> <!-- 案例:action/service/dao --> <!-- dao instance --> <bean id="userDao" class="cn.itcast.c_property.UserDao" scope="singleton"></bean> <!-- service instance --> <bean id="userService" class="cn.itcast.c_property.UserService" scope="singleton"> <property name="userDao" ref="userDao"></property> </bean> <!-- action instance --> <bean id="userAction1" class="cn.itcast.c_property.UserAction" scope="prototype"> <property name="userService" ref="userService"></property> </bean> <!-- 内部bean --> <bean id="userAction2" class="cn.itcast.c_property.UserAction"> <property name="userService"> <bean class="cn.itcast.c_property.UserService"> <property name="userDao"> <bean class="cn.itcast.c_property.UserDao"></bean> </property> </bean> </property> </bean> </beans>
p名称空间
<!--必须有xmlns:p才可以使用--> <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation= "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--######### 给对象的属性赋值 #########--> <!-- 给对象属性注入值: # p 名称空间给对象的属性注入值 (spring3.0以上版本支持) --> <bean id="userDao" class="cn.itcast.c_property.UserDao"></bean> <bean id="userService" class="cn.itcast.c_property.UserService" p:userDao-ref="userDao"></bean> <bean id="userAction" class="cn.itcast.c_property.UserAction" p:userService-ref="userService"></bean> <!-- p后面两种形式,都可以实现给属性赋值 1. p: 属性名=赋值 2. p: 属性引用=引用id --> <bean id="user" class="cn.itcast.c_property.User" p:id="100" p:name="Tomm"></bean> </beans>
自动装配
- 根据名称自动装配,autowire=”byName”
- 自动去IOC容器中找与属性名同名的引用的对象
<!--######### 给对象的属性赋值 #########--> <bean id="userDao" class="cn.itcast.d_auto.UserDao"></bean> <bean id="userService" class="cn.itcast.d_auto.UserService" autowire="byName"></bean> <!-- 根据"名称"自动装配,userAction注入的属性,回去IOC容器中自动查找与属性同名的对象 --> <bean id="userAction" class="cn.itcast.d_auto.UserAction" autowire="byName"></bean> <!--同时也可以写到全局--> <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation= "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd" default-autowire="byName"> <!--######### 给对象的属性赋值 #########--> <bean id="userDao" class="cn.itcast.d_auto.UserDao"></bean> <bean id="userService" class="cn.itcast.d_auto.UserService"></bean> <!-- 根据"名称"自动装配,userAction注入的属性,回去IOC容器中自动查找与属性同名的对象 --> <bean id="userAction" class="cn.itcast.d_auto.UserAction"></bean> </beans>
- 自动去IOC容器中找与属性名同名的引用的对象
- 根据名称自动装配,autowire=”byName”
- 注释
- 注解可以与XML配置共同使用
- @Resource 根据类型查找
- @Resource(name=”名称”) 根据名称查找