bean标配的基本配置
id:Bean实例在Spring容器中的唯一标识
class Bean的全限定名
scope
1.当scope的取值为singleton时
Bean的实例化个数: 1个
Bean的实例化时机:当Spri ng核心文件被加载时,实例化配置的Bean实例
Bean的生命周期:
对象创建:当应用加载,创建容器时,对象就被创建了
对象运行:只要容器在,对象一直活着
对象销毁:当应用卸载,销毁容器时,对象就被销毁了
2.当scope的取值 为prototype时
Bean的实例化个数:多个
Bean的实例化时机:当调用getBean()方法时实例化Bean
Bean的生命周期:
对象创建:当使用对象时,创建新的对象实例
对象运行:只要对象在使用中,就一直活着
对象销毁:当对象长时间不用时,被Java 的垃圾回收器回收了
* init-method:指定类中的初始化方法名称
* destroy-method:指定类中销毁方法名称
<bean id=\"userDao\" class=\"com.ithema.dao.impl.UserDaoimpl\" init-method=\"init\" destroy-method=\"destory\"></bean>
实例化bean对象
1,提供无参构造方法(默认)
2,静态工厂实例化bean
1、创建工厂类
public class BeanDaoFactory {
public static BeanDao getBeanDao(){
System.out.println(\"bean dao factory running ...\");
return new BeanDaoImpl();
}
}
2、配置bean
<bean id=\"beanDao\" class=\"com.ithema.dao.impl.BeanDaoFactory\" factory-method=\"getBeanDao\" />
3、实例工厂实例化bean
1、定义实例工厂
public class BeanDaoFactory {
public BeanDao getBeanDao(){
System.out.println(\"bean dao factory running ...\");
return new BeanDaoImpl();
}
}
2、配置bean
<!-- 1.配置实例工厂对象 -->
<bean id=\"beanFactory\" class=\"factory.BeanDaoFactory\" />
<!-- 2.配置beanDao对象 -->
<bean id=\"beanDao\" factory-bean=\"beanFactory\" factory-method=\"getBeanDao\" />
测试代码
public class App {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(\"applicationContext.xml\");
BeanDao beanDao = (BeanDao) context.getBean(\"beanDao\");
beanDao.save();
}
}
bean依赖注入的三种方式
set方法
1.set方法
public class UserServiceImp implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao){
this.userDao = userDao;
}
@Override
public void save() {
userDao.save();
}
}
2.配置Spring容器调用set方法进行注入
<bean id=\"userDao\" class=\"com.weihong.dao.impl.UserDaoImpl\" scope=\"prototype\"></bean>
<bean id=\"userService\" class=\"com.weihong.service.serviceImp.UserServiceImp\" >
<!--
name:表示UserServiceImpl里UserDao对象的参数
ref:表示引用的是bean对象id为UserDao的对象(引用对象的注入)
-->
<property name=\"userDao\" ref=\"userDao\"></property>
</bean>
P命名空间注入
P命名空间注入本质也是set方法注入,但比起上述的set方法注入更加方便,主要体现在配置文件中,如下:
1.定义约束头,引入p命名空间:
xmlns:p=\"http://www.springframework.org/schema/p\"
2.修改注入方式:
<bean id=\"userDao\" class=\"com.weihong.dao.impl.UserDaoImpl\" scope=\"prototype\"></bean>
<bean id=\"userService\" class=\"com.weihong.service.serviceImp.UserServiceImp\" p:userDao-ref=\"userDao\">
</bean>
</bean>
2.1 构造方法
1.在UserServiceImpl中创建有参构造
public class UserServiceImp implements UserService {
private UserDao userDao;
public UserServiceImp(UserDao userDao){
this.userDao = userDao;
}
@Override
public void save() {
userDao.save();
}
}
2. 配置Spring容器调用有参构造时进行注入
<bean id=\"userDao\" class=\"com.weihong.dao.impl.UserDaoImpl\" scope=\"prototype\"></bean>
<bean id=\"userService\" class=\"com.weihong.service.serviceImp.UserServiceImp\" >
<constructor-arg name=\"userDao\" ref=\"userDao\" ></constructor-arg>
<!-- name:表示UserServiceImpl里UserDao对象的参数
ref:表示引用的是bean对象id为UserDao的对象
-->
</bean>
3.1注入普通数据类型
1.普通数据类型
public class UserDaoImpl implements UserDao {
private String username;
private Integer age;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public void save(){
System.out.println(\"age=\"+age+\" username=\" +username);
}
}
2.配置文件
<bean id=\"userDao2\" class=\"com.weihong.dao.impl.UserDaoImpl\" >
<!-- name:表示对象属性
value:表示为对象属性赋值
ref:表示引用数据对象的注入
-->
<property name=\"username\" value=\"张三\"></property>
<property name=\"age\" value=\"17\" ></property>
</bean>
3.2注入集合数据类型
使用set注入
在UserDaoimpl添加集合
private List<String> strList;
private Map<String, User> userMap;
private Properties properties;
public void setStrList(List<String> strList) {
this.strList = strList;
}
public void setUserMap(Map<String, User> userMap) {
this.userMap = userMap;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
2.配置文件
<bean id=\"user1\" class=\"com.ithema.domain.User\" >
<property name=\"name\" value=\"tom\"></property>
<property name=\"addr\" value=\"bai\"></property>
</bean>
<bean id=\"user2\" class=\"com.ithema.domain.User\" >
<property name=\"name\" value=\"lucy\"></property>
<property name=\"addr\" value=\"cq\"></property>
</bean>
<bean id=\"userDao\" class=\"com.ithema.dao.impl.UserDaoimpl\" >
<property name=\"strList\">
<list>
<value>aaa</value>
<value>bbb</value>
<value>ccc</value>
</list>
</property>
<property name=\"properties\">
<props>
<prop key=\"k1\">v1</prop>
<prop key=\"k2\">v2</prop>
<prop key=\"k3\">v3</prop>
</props>
</property>
<property name=\"userMap\">
<map>
<entry key=\"u1\" value-ref=\"user1\"></entry>
<entry key=\"u2\" value-ref=\"user2\"></entry>
</map>
</property>
</bean>
4.引入其他的配置文件
<import resource=\"applicationContext-user .xml\"></import>
来源:https://www.cnblogs.com/itth/p/16296666.html
本站部分图文来源于网络,如有侵权请联系删除。