Spring自动注入,Spring加载配置文件,scope属性,单例
自动注入
什么情况下我们使用自动注入:在 Spring 配置文件中对象名和 ref=”id”id 名相同使用自动注入,可以不配置<property/>
配置方法:1.在<bean>中通过 autowire=”” 配置,只对这个<bean>生效 2. 在<beans>中通过 default-autowire=””配置,表当当前文件中所有<bean>都是全局配置内容
autowire=”” 可取值 default: 默认值,根据全局 default-autowire=””值.默认全局和局部都没有配置情况下,相当于 no
no: 不自动注入 byName: 通过名称自动注入.在 Spring 容器中找类的 Id
byType: 根据类型注入:spring 容器中不可以出现两个相同类型的<bean>
constructor: 根据构造方法注入. 提供对应参数的构造方法(构造方法参数中包含注入那个)底层使用 byName, 构造方法参数名和其他<bean>的 id相同.
Spring加载配置文件:
1.在 src 下新建 xxx.properties 文件 2. 在 spring 配置文件中先引入 xmlns:context,在下面添加配置文件(多个文件用逗号分隔) 3.添加了属性文件记载,并且在<beans>中开启自动注入时 ,需要注意的地方:
![]()
通过配置文件,加载变量值:
当我们有多个配置文件,并且我们开启注解扫描器的时候,我们可以这样给一个变量赋值:
新建一个变量,然后直接@value("${配置文件里的key}") 就能把值赋给变量。
scope 属性:
scope 是<bean>的属性,控制对象有效范围(单例,多例等)
<bean/>标签对应的对象默认是单例的. 无论获取多少次,都是同一个对象
scope 可取值: singleton 默认值,单例 prototype 多例,每次获取重新实例化
request 每次请求重新实例化 session 每个会话对象内,对象是单例的.
application 在 application 对象内是单例 global session spring推出的一个对象,依赖于spring-webmvc-portlet,类似于 session
单例设计模式:在应用程序有保证最多只能有一个实例.提升运行效率. 实现数据共享. 案例:application 对象
懒汉式:对象只有被调用时才去创建.
public class SingleTon { //由于对象需要被静态方法调用,把方法设置为static //由于对象是static,必须要设置访问权限修饰符为private ,如果是public可以直接调用对象,不执行访问入口 private static SingleTon singleton; /** * 方法名和类名相同 * 无返回值. * * * 其他类不能实例化这个类对象 * * 对外提供访问入口 */ private SingleTon(){} /** * 实例方法,实例方法必须通过对象调用 * * 设置方法为静态方法 * * * @return */ public static SingleTon getInstance(){ //添加逻辑如果实例化过,直接返回 if(singleton==null){ /* * 多线程访问下,可能出现if同时成立的情况,添加锁 */ synchronized (SingleTon.class) { //双重验证 if(singleton==null){ singleton = new SingleTon(); } } } return singleton; } }
饿汉式:懒汉式由于添加了锁,所以导致效率低. 解决了懒汉式中多线程访问可能出现同一个对象和效率低问题
public class SingleTon { //在类加载时进行实例化. private static SingleTon singleton=new SingleTon(); private SingleTon(){} public static SingleTon getInstance(){ return singleton; } }