暴力反射
无参构造方法实例
必须要有无参构造才能创建
静态工厂与动态工厂实例
scope
1、singleton ,单例模式,在spring核心文件被加载时进行实例化,创建容器时对象创建,应用卸载时,销毁容器并摧毁对象
2、prototype, 实例化多个,使用对象时,会创建新的对象实例,对象长时间不用会被java垃圾回收器回收,对象摧毁
bean 生命周期配置
init-method 指定类中初始化方法名称
destory-method 指定类中销毁方法名称
关闭Spring容器
ClassPathXmlApplicationContext cpac = …;
cpac.close();
Set方法依赖注入
在使用Service处理业务时,调用Dao层方法时,要将Spring容器中的dao对象注入到Service层对象中
public class UserService(){
//将Service对象加入要注入对象的set方法
private UserDao userDao;
public void setUserDao(UserDao userDao){
this.userDao = userDao;
}
}
<bean id="userDao" class="com.qzj.dao.UserDao"></bean>
<!--创建userService对象时,直接将dao对象也注入-->
<bean id="userService" class="com.qzj.service.UserService">
<property name="userDao" ref="userDao"></property>
</bean>
p命名空间
<beans xmlns:p="http://www.springframework.org/schema/p">
<bean id="userServiceImpl" class="com.qzj.service.UserServiceImpl" p:userDao-ref="userDao"></bean>
</beans>
构造方法依赖注入
public class UserService(){
//将Service对象加入要注入对象的有参构造方法
private UserDao userDao;
public UserSerivce(UserDao userDao){
this.userDao = userDao;
}
}
<bean id="userDao" class="com.qzj.dao.UserDao"></bean>
<!--创建userService对象时,直接将dao对象也注入-->
<bean id="userService" class="com.qzj.service.UserService">
<!--name 是参数名,ref是从bean中获取的对象名-->
<constructor-arg name="userDao" ref="userDao"></constructor-arg>
</bean>
普通数据类型注入
<bean id="userService" class="com.qzj.service.UserService">
<property name="age" value="12" />
</bean>
集合注入
<bean id="userService" class="com.qzj.service.UserService">
<property name="strList">
<list>
<!--普通数据类型用value,引用 ref-->
<value>aaa</value>
<value>bbb</value>
</list>
</property>
<property name="personMap">
<map>
<!--普通数据类型用value,引用 ref-->
<entry key="zhangsan" key-ref="user1"></entry>
<entry></entry>
</map>
</property>
<property name="properties">
<props>
<prop key="p1">p1的value</prop>
<prop key="p2">p2的value</prop>
</props>
</property>
</bean>
<bean id="user1" class="po.User">
<property name="age" value="18"/>
</bean>