自动注入
什么情况下我们使用自动注入:在 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;
}
}