spring 配置文件 --bean
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>
spring 配置文件 --bean的更多相关文章
- Spring配置文件-Bean生命周期配置(init-method方法,destory-method方法)
1.UserDaoImpl类 public class UserDaoImpl implements UserDao { public UserDaoImpl(){ System.out.printl ...
- Spring配置文件-Bean实例化的三种方式
1.无参构造方法实例化(详见我的博客) 2.工厂静态方法实例化 创建StaticFactory类 public class StaticFactory { public static UserDao ...
- 读取spring配置文件的方法(spring读取资源文件)
1.spring配置文件 <bean id="configproperties" class="org.springframework.beans.factory. ...
- 通过Spring配置文件中bean中的property赋值
基本数据类型赋值-通过spring配置文件中bean中的property 扩展-以此方式可以通过配置为连接数据的属性赋值 1.如果是基本数据类型,可以通过setter方法为对象中的属性设置初始值,应用 ...
- Spring配置文件中使用ref local与ref bean的区别
Spring配置文件中使用ref local与ref bean的区别.在ApplicationResources.properties文件中,使用<ref bean>与<ref lo ...
- Spring依赖注入的方式、类型、Bean的作用域、自动注入、在Spring配置文件中引入属性文件
1.Spring依赖注入的方式 通过set方法完成依赖注入 通过构造方法完成依赖注入 2.依赖注入的类型 基本数据类型和字符串 使用value属性 如果是指向另一个对象的引入 使用ref属性 User ...
- IOC——Spring的bean的管理(xml配置文件)
Bean实例化(三种方式) 1.使用类的无参构造进行创建(大多数情况下) <bean id="user" class="com.bjxb.ioc.User" ...
- Spring配置文件中<bean>标签的scope属性
转自:https://fj-sh-chz.iteye.com/blog/1775149 singleton (默认属性) Spring将Bean放入Spring IOC容器的缓存池中,并将Bean引 ...
- spring的bean管理(注解和配置文件混合使用)
1.建三个类,在一个类中引用其他两个类 import javax.annotation.Resource; import org.springframework.beans.factory.annot ...
随机推荐
- 从零开始画自己的DAG作业依赖图(四)--节点连线优化版
概述 上个版本简单的连线在一些复杂场景,尤其层级比较多,连线跨层级比较多的情况下,会出现线条会穿过矩形的情况,这一讲就是在这个基础上,去优化这个连线. 场景分析 在下面几种情况下,简单版本的画法已经没 ...
- css写作建议和性能优化小结
1.前言 还有几天就到国庆中秋了,快要放假了,先祝大家节日快乐!之前写过js的写作建议和技巧,那么今天就来聊聊css吧!说到css,每一个网页都离不开css,但是对于css,很多开发者的想法就是,cs ...
- 你不需要基于 CSS Grid 的栅格布局系统
在过去的几个星期里,我开始看到基于 CSS Grid 的布局框架和栅格系统的出现.我们惊讶它为什么出现的这么晚.但除了使用 CSS Grid 栅格化布局,我至今还没有看到任何框架能提供其他有价值的东西 ...
- python-输入输出-计算字符串中的数
将字符串中的每个数都抽取出来,然后统计所有数的个数并求和. 输入格式: 一行字符串,字符串中的数之间用1个空格或者多个空格分隔. 输出格式: 第1行:输出数的个数.第2行:求和的结果,保留3位小数. ...
- java中当static块和构造函数同时出现,顺序是?
静态块先于构造函数执行 class Student { int age; String name; static int count; public Student() { ...
- css过渡效果和盒子缩放大小的结合
给盒子一个鼠标经过时放大里面的图片效果在css中使用过渡效果transition结合 <html lang="en"> <head> <meta ch ...
- 解决“WARNINGThe remote SSH server rejected X11 forwarding request.“警告
使用xshell连接服务器时,出现了"WARNING! The remote SSH server rejected X11 forwarding request.",意思是&qu ...
- IOH和MCH(北桥芯片的变化)
IOH位置架构图示意图 北桥芯片-MCH和北桥芯片-IOH区别 1.MCH是内存控制器中心的英文缩写,负责连接CPU,AGP总线和内存, 目前Intel的CPU已经把内存控制器(北桥芯片-MCH)总线 ...
- rbac介绍、自动生成接口文档、jwt介绍与快速签发认证、jwt定制返回格式
今日内容概要 RBAC 自动生成接口文档 jwt介绍与快速使用 jwt定制返回格式 jwt源码分析 内容详细 1.RBAC(重要) # RBAC 是基于角色的访问控制(Role-Based Acces ...
- 3.Docker容器学习之新手基础使用
原文地址: http://blog.weiyigeek.top/2019/5/2-docker%E5%AD%A6%E4%B9%A0%E4%B9%8B%E5%9F%BA%E7%A1%80%E4%BD%B ...