Spring自动注入,Spring加载配置文件,scope属性,单例

版权声明:未经本人同意,不得私自转载 https://blog.csdn.net/weixin_41866744/article/details/87904983

自动注入

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

猜你喜欢

转载自blog.csdn.net/weixin_41866744/article/details/87904983