Spring的配置文件
Bean 标签基本配置
使用Spring来创建对象,每一个对象在Spring中都被称为bean,这句是重点
- 用来配置对象交由 Spring 来创建
- 默认情况下它( Spring ) 调用的是类中的无参构造函数,如果没有无参构造函数则不能创建成功
基本属性:
id:Bean 实例在 Spring 容器中的唯一标识 class:Bean 的 全限定名称 / 全包名
Bean 标签范围配置
- scope:指对象的作用范围,取值如下:
取值范围 说明
singleton 单例的
prototype 原型模式
默认情况的话就是属于单例模式
下面看图例
为什么bean默认为单例
为了提高效率!
比如你每次调用dao对象执行里面的方法,dao对象我们需要每次都重新创建吗?不需要,因为都是同一个对象只是每次调用对象里不同的方法罢了,所以Sping里的bean默认都是单例的。
那么哪些bean适合交给ioc容器管理呢?
- 表现层对象
- 业务层对象
- 数据层对象
- 工具类对象
因为这些以上对象可以重复利用,交给ioc可以提高效率
不适合交给容器进行管理的bean
- 封装实体的域对象 每个实体对应数据库一条数据,这个自然是不能交给ioc来管理的
Bean 生命周期配置
**字如其名,就是英译汉过来的意思 **
- init-method:指定类中的初始化方法名称
- destory-method:指定类中销毁方法名称
在要注入的bean中,可以写bean的初始化方法和销毁方法
在spring的配置文件中进行指定
下面看图例
Bean 实例化的三种方式
无参构造方法实例化
public class UserDaoImpl implements UserDao { public UserDaoImpl(){ System.out.println("Dao ------ 无参构造方法......"); } } <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"></bean> </beans> public class UserDaoDemo { public static void main(String[] args) { ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("application.xml"); UserDao userDao = (UserDao) app.getBean("getUserDao"); userDao.save(); } } 通过无参构造函数实例化对象
工厂静态方法实例化
public class UserDaoImpl implements UserDao { public UserDaoImpl(){ System.out.println("Dao ------ 无参构造方法......"); } } <!-- getUserDao在StaticFactory中是静态方法,所以可以直接获取--> <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="getUserDao" class="com.heima.factory.StaticFactory" factory-method="getUserDao"> </bean> public class UserDaoDemo { public static void main(String[] args) { ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("application.xml"); UserDao userDao = (UserDao) app.getBean("getUserDao"); userDao.save(); } } 通过无参构造函数实例化对象 save running.......
工厂实例方法实例化
public class StaticFactory { public UserDao getUserDao(){ return new UserDaoImpl(); } } public class UserDaoImpl implements UserDao { public UserDaoImpl(){ System.out.println("Dao ------ 无参构造方法......"); } } <!-- getUserDao在StaticFactory中是静态方法,所以可以直接获取--> <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--动态Bean工厂需先配置 动态工厂,再根据动态工厂名指定工厂需执行的方法--> <bean id="getUserDao" class="com.heima.factory.StaticFactory"/> <bean id="getUserDaoBean" factory-bean="getUserDao" factory-method="getUserDao"/> public class UserDaoDemo { public static void main(String[] args) { ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("application.xml"); //这里获取的bean为getUserDaoBean UserDao userDao = (UserDao) app.getBean("getUserDaoBean"); userDao.save(); } } 通过无参构造函数实例化对象 save running.......
Spring 的重点配置
id 属性:在容器中 Bean 实例的唯一标识,不允许重复
class 属性:要实例化的 Bean 的全限定名
scope 属性:Bean 的作用范围,常用是 singleton(单例模式)和 prototype(原型模式/多例模式)
<property>
标签:属性注入
name 属性:属性名称
value 属性:注入的普通属性值
ef 属性:注入的对象引用值
<constructor-arg>
有参结构体 set 注入 标签
<constructor-arg name="userDao" ref="set 方法 - set 转 小驼峰"></constructor-arg>
<import>
标签:导入其他的 Spring 的分文件 如下,导入一个xml文件:
<import resource="applicationContext-user.xml"></import>
对应的实例,都放到一张图上了,需要的可以自取。到后面其实还是用注解为多配置文件形式了解即可。