Spring4 学习笔记

一.接口和面向接口编程

接口每层只向上层提供一组功能接口,各层间仅依赖接口而非实现类

面向接口编程隐藏具体实现,实现的变动不影响各层级间的调用

二.Ioc控制反转 DI依赖注入

控制反转(控制权的转移)应用程序本身不负责依赖对象的创建和维护,而是由外部容器负责。

实现方式:依赖注入(获得依赖对象的过程被反转了)创建对象并组装对象间的关系(创建好对象,把对象之间的依赖关系,通过注入的方式,组织起来)

三.对象Bean的配置

基于XML配置

<bean>, ApplicationContext, context.getBean();

扫描二维码关注公众号,回复: 2581563 查看本文章

spring-ioc.xml, OneInterface(Imp).java,TestOneInterface.java

四.Spring注入

启动Spring容器加载Bean配置的时候,完成对变量的赋值行为

设值注入自动调用类的setter方法必须要有无参构造器

<property>

构造注入自动执行带参数的构造器

<constructor-arg>

name:成员变量的名称(设值注入时)       ref:成员变量的类型为容器中另一个Bean实例

          构造器参数名称(构造注入时)       value: 成员变量的类型为基本类型及其包装类

                                                                                    list、set、map及props: 注入集合值

spring-injection.xml,InjectionDAO(imp).java, InjectionService(Imp).java, TestInjection.java

五.Bean的基本定义

六.Bean的作用域

<bean … scope=””>

默认为singleton单例

Spring-beanscope.xml, BeanScope.java,TestBeanScope.java

七.Bean的生命周期

初始化执行特定行为1.使用init-method属性 2.实现InitializingBean接口afterPropertiesSet()

指定某个方法在Bean全部依赖关系设置结束后自动执行

销毁前执行特定行为 1.destroy-method属性 2.实现DisposableBean接口destroy()方法

指定某个方法在Bean销毁之前自动执行

配置全局默认初始化、销毁方法

使用default-init-method和default-destroy-method属性

Spring-lifecycle.xml,

八.Aware接口

ApplicationContextAware:加载Spring配置文件时,如果Spring配置文件中所定义的Bean类实现了这个接口,这个类会自动调用ApplicationContextAware 接口中的默认方法:setApplicationContext(ApplicationContextcontext),就可以方便获得ApplicationContext中的所有Bean。

BeanNameAware:获取实例名

Spring-aware.xml,MoocApplicationContext.java, MoocBeanName.java, TestAware.java

九.Bean的自动装配autowire

<beans…default-autowire=””>

<bean … autowire=””>

Spring-autowiring.xml,AutowiringDAO.java, AutowiringService.java, TestAutoWire.java

十.资源访问

Resource接口,实现类根据不同的底层资源,分为UriResource, ClassPathResource,ServletResource等。

ResourceLoader接口,实现类课通过getResource(String location)返回一个Resource实例。ApplicationContext的实现类都实现了ResourceLoader接口。

Spring-resource.xml,MoocResource.java, TestResource.java

十一。基于注解的Bean配置

在Spring配置文件中配置<context:component-scan back-package=””/>标签后,自动扫描指定包及其子包下的所有Bean类。为<context:component-scan>元素添加<include-filter>和<exclude-filter>子元素,可指定特定的Spring Bean类。

@Component,标注一个普通的Spring Bean类

@Controller,@Service, @Repository标注的Bean类被作为特殊的Java EE组件对待。

注解注在类上以后,Spring可以自动检测到并注册Bean到ApplicationContext中

Bean的id名称可以通过@Component(“beanTest”)来指定,否则默认首字母小写,其他不变。

可使用@Scope的annotation指定实例的作用域。   @Scope(value=“prototype”)

可使用@Resource的annotation为目标Bean指定协作者Bean。@Resource(“injectionDAO”) 与 <bean id=”injectionService” class=”xxx”ref=”injectionDAO”>的作用相同。

把@PostConstruct和@PreDestroy注解在方法,定制生命周期行为

Spring-beanannotation.xml,BeanAnnotation.java, TestBeanAnnotation.java

十二。Autowired注解说明

@Autowired注解来指定自动装配,可以修饰setter方法、普通方法、实例成员变量和构造器。当使用@Autowired标注setter方法、构造器和实例成员变量时,都默认采用byType自动装配策略。

Spring-beanannotation.xml,InjectionDAO(imp).java, InjectionService(Imp).java,TestInjection.java

可使用@Autowired注解如BeanFactory、ResourceLoader、ApplicationCont等解析依赖性的接口,以及自动装配数组和List、Map等集合。

Spring-beanannotation.xml,BeanInterface.java, BeanImplOne.java, BeanImplTwo.java, BeanInvoker.java, TestInjection.java. testMultiBean()

十三。Qualifier自动装配

@Qualifier,允许根据Bean的id来执行自动装配。

使用@Autowired和@Qualifier实现精确的自动装配,还不如直接使用@Resource依赖注入

Spring-beanannotation.xml,BeanInterface.java, BeanImplOne.java, BeanImplTwo.java, BeanInvoker.java, TestInjection.java. testMultiBean()

十四。@Bean和@Configuration

用@Bean注解的方法:会实例化、配置并初始化一个新的对象,这个对象会由spring IoC 容器管理。

上面两段代码作用相同

自定义Bean name和初始化销毁方法,否则Bean name为方法的名称: @Bean(name = "store",initMethod="init", destroyMethod="destroy")

Store.java, StringStore.java,StoreConfig.java, TestJavabased.java

十五。@ImportResource@Value和<Context:property-placeholderlocation=”xxx”>

@ImportResource @Value@Bean组合使用,相当于通过<bean><property …/>来生成Bean

Config.xml,StoreConfig.java, MyDriverManager.java, TestJavabased.java

十六。基于泛型的自动装配

@Configuration @Bean创建实例,@Autowired自动转配

StringStore.java,IntegerStore.java, StoreConfig.stringStoreTest(), TestJavabased. testG()

猜你喜欢

转载自blog.csdn.net/sinat_27955211/article/details/57081292
今日推荐