Spring IOC 第三部分

》 常见 属性的说明

>depend-on  

    要求在加载此 bean 内容之前,强制初始化  (强制先加载另一个Bean

<bean id="a" class="com.kgc.ioc.type.A" depends-on="api01" >

>lazy-init    

 lazy 【延迟加载 | 懒汉模式 | 饥汉模式】

     1.    延迟加载 :   啥时候用到它 再加载

     2.    延迟到啥时候 ?: 啥时候用到它 再加载

     3.    延迟加载 体现的思想 : 以空间换时间

   lazy-init="true"  <!--   添加lazy-init  延迟加载 -->

        一个一个 配置 太麻烦  :给一个全局配置

         default-lazy-init ="true"

>default-lazy-init  修改默认配置

 注意 : 延迟初始化 只对 singleton bean 起作用

 

》 自动装配

4 种 装配类型

  1.     no   :最常用的 可读性高

  2.     byName

  3.     byType

  4.    constractor 按构造方法匹配

          >  是根据类型进行匹配的  > 如果没有匹配上的,则报错

          >  如果有多个匹配上的 则报错

        <!--  属性中 加入 autowire="byName"、"byType"、"constractor" -->
	<!-- <property name="implOne" ref="implOne"></property> -->
	<bean id="client" class="com.kgc.ioc.autoWired.Client" autowire="byName"></bean>
	<bean id="implOne" class="com.kgc.ioc.autoWired.AutoWiredImplOne"></bean>

  注意构造方法的 使用

//	构造方法只在  constractor 按构造方法匹配 时需要, byName byType 时不需要
	public Client(AutoWiredApi implOne){
		this.implOne = implOne;
	}

注意:1. 如果整个项目组命名非常规范,byName 是不错的选择   可以设置 配置文  default-autowired=””

不易维护: 自动装配使得配置文件非常简洁,但同时也造成组件之间依赖关系不明确,容易发生一些潜在的错误,在实际项目中谨慎使用

          2.小型项目上 ,配置文件不多,一定不会因为人为原因出现类型重复

 

其他内容 补充

》 方法 注入   lookup-method

 主要应用场景 :  希望向单例对象中加入 原型对象的时候引用

底层实现: 是通过CGLIB 进行动态生成 子类实现的

        <bean id="one" class="com.kgc.ioc.method.MethodDemoOne" scope="singleton">
		<lookup-method name="getTwo" bean="two"/>
	</bean>
	<bean id="two" class="com.kgc.ioc.method.MethodDemoTwo" scope="prototype"></bean>
	

 MethodDemoOne中定义了 一个抽象方法  通过方法 注入 实现

	private MethodDemoTwo two;

	public abstract MethodDemoTwo getTwo();
	public void setTwo(MethodDemoTwo two) {
		this.two = two;
	}

 

》 bean 的生命周期

  初始化 管理  1、实现 InitializingBean 接口

public class LifeCycleDemo implements InitializingBean {

	在实例初始化 以后回调的方法
	@Override
	public void afterPropertiesSet() throws Exception {
		System.out.println("this is init method!");
	}
}

                       2、使用 init-method 标签

	<!--  演示生命周期管理 -->
	<bean id="lifeCycle" class="com.kgc.ioc.lifecycle.LifeCycleDemo"
		init-method="init" 
	></bean>

 

	public void init(){
		System.out.println("this is diy init");
	}
	

  销毁 管理   1、实现 DisposableBean 接口

                     2、使用 destorsy-method 标签

 

》国际化

     format.properties 的配置

kgc1=v1
kgc2=\u6211\u7231\u8BFE\u5DE5\u573A {0}--{1}

在配置文件中 加入 message 支持

	<bean id="messageSource"
		class="org.springframework.context.support.ResourceBundleMessageSource">
		<property name="basenames">
			<list>
				<value>format</value>
			</list>
		</property>
	</bean>

通过ApplicationContext 的实例进行读取

getMessage (4个参数)

		ApplicationContext atc = new ClassPathXmlApplicationContext("applicationContext-national.xml");

//		第一个参数 :要获取的内容的 key
//		第二个参数 :待传入的值
//		第三个参数 : 默认值
//		第四个参数 : 指定的语言
		String message = atc.getMessage("kgc2", new Object[]{"kgc","万岁"}, "default", Locale.CHINA);
		System.out.println("message = "+message);
		

 

》事件   

 1、ContextRefreshedEvent

    当IoC 容器 初始化或刷新 的时候调用的事件

2、ContextCloseEvent

     IoC容器 被关闭的时候调用的事件

3、requestHandleEvent

 当http事件 被响应的时候 发出的事件

 

》访问资源

Spring 给我们提供了一个Resource 接口来帮助我们 访问资源

	<bean id="resource" class="com.kgc.ioc.resource.MyResource">
		<property name="resource" value="applicationContext-resource.xml"></property>
	</bean>

实例以文件读取为主

	private Resource resource;

	public void setResource(Resource resource) {
		this.resource = resource;
	}

 

》全注解  @interface

三类:

  1. 元注解
  •    @override  
  •  @SuppressWarnings

     2.自定义注解

  •     @interface

     3.其他注解

  • Spring提供的注解

Spring 注解的作用

注册Bean

  • @Conttroller    
  • @Service   
  • @Repository     
  • @Comport

注入bean

  • @Autowired

>  使用步骤

1、先开启注解支持

        <!-- 开启注解 -->
	<context:component-scan base-package="com.kgc.ioc.anno"></context:component-scan>

2、注册两个 bean

@Service("beanA")
public class BeanA {
	@Autowired
	private BeanB b;
	
//	写一个Setter 方法

	
	public static void main(String[] args) {
		
		ApplicationContext atc = new ClassPathXmlApplicationContext("applicationContext-anno.xml");
		
		BeanA a = (BeanA)atc.getBean("beanA");
		
		a.b.run();
		
	}

}

 标签最后一步 加

@Service("beanB")
public class BeanB {
	
	public void run(){
		System.out.println("BeanB method");
	}
	
}

3、将一个 bean 注入到另一个 bean

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值