Spring IOC高级

1.Spring IOC 注解基本应用

1.1.Spring Bean 注解描述

1.2.Spring Bean 注解应用

1.2.1.Bean对象声明注解应用

1.2.2.Bean对象作用域注解应用

1.2.3.Bean对象生命周期方法注解应用

1.2.4.Bean对象自动装配注解应用

2.Spring IOC 注解应用进阶

2.1.@ComponentScan注解应用

2.2.@Bean注解应用

2.3.@Value与@PropertySource注解应用

3.总结

3.1.重点和难点分析

3.2.作业

1.SpringIOC注解基本应用

1.1.   Spring Bean 注解描述

Spring容器中描述bean的方式有两种,一种是基于xml方式,一种是基于注解方式.,现阶段基于注解方式描述Bean元素已经成为一种趋势.Spring中常用的bean注解有如下几种:

1)                修饰Bean对象的注解。(xml中描述bean使用<bean>)

a)   @Configuration(描述Bean为一个配置对象)

b)   @Component(描述Bean为一个一般组件组件)

c)   @Controller(描述Bean为一个控制层对象)

d)   @Service (描述Bean为一个业务层对象)

e)   @Respository(描述Bean为一个持久层对象)

f)   @Scope(描述bean的作用域)

g)   @Lazy(定义bean对象是否延迟加载)

h)   ….

1)   指定Bean生命周期方法(xml中使用<bean init-method=””>)

a)   @ PostConstruct(描述生命周期开始要调用的初始化的方法)

b)   @ PreDestroy (描述生命周期结束时要调用的销毁的方法)

说明:描述生命周期方法的注解应用时应在JDK1.7以上版本

2)   自动装配注解(为属性注入值):类似xml阶段中bean标签的autowire属性

a)   @Autowire (一般修饰构造方法或set方法或属性,默认按类型装配)

b)   @Qualifier (配合Autowire注解,按名字进行装配,尤其是出类型相同的bean时,可以指定具体bean)

c)   @Resource (一般修饰set方法或属性,默认按名字装配)

1.2.   Spring Bean 注解应用

在spring应用中假如使用注解描述bean,定义bean的依赖机制,首先需要配置

类的扫描机制(扫描某个或多个包中的类),spring扫描到这个类以后,会检测类上是否有spring中定义的相关注解的描述(例如@Controller,@Service),假如有spring底层会通过反射构建此类型的对象,然后进行管理.

1.2.1.  Bean对象声明注解应用

项目应用中我们自己定义的类假如需要由Spring IOC管理,可以通过相关注解进行描述,例如:

a)   @Configuration(用于描述配置类)

b)   @Component (描述通用性组件)

c)   @Controller (描述MVC中控制层组件)

d)   @Service (描述MVC 中业务层组件)

e)   @Repository(描述MVC中持久层组件)

说明:这些组件实现的功能是一样的,只是应用的业务场景不同

应用案例分析:

定义Bean组件,并使用spring注解修饰,例如

publicinterfaceSysConfigDao {}

@Repository

publicclassSysConfigDaoimpl implements SysConfigDao  {}

publicinterfaceSysConfigService {}

@Service

publicclassSysConfigServiceImpl implements SysConfigService  {}

@Controller

publicclassSysConfigController {}

@Configuration

publicclassAppConfig {}

说明:使用Spring注解修饰的类,默认bean的名字为类名并且首字母小写.当然也可以为Bean对象指定名字,例如@Service(“sysConfig”)

1.2.2.  Bean对象作用域注解应用

Spring管理的Bean一般都会指定一个作用域,借助注解定义作用域时需要

使用@Scope,注解中常用值为singleton或者prototype,当然还有其它的作用域,只是用的比较少而已。

@Scope("singleton")

@Component

publicclassOpenDataSource{

}

其中:

1)   singeton 表示单例作用域,每次获取的对象都是一样的。

2)   prototype表示多例作用域,每次获取的对象都是不同的。

1.2.3.  Bean对象生命周期方法注解应用

Spring管理的Bean对象都有生命周期,但不一定都有生命周期方法,假如有些Bean需要指定生命周期方法,基于注解实现时可以借助@PostConstruct和@ PreDestroy,这个两个注解都属于JDK中的API,使用时需要注意版本问题

@Scope//默认是singleton

@Component

publicclassOpenDataSource {

/**使用此注解修饰的方法为对象生命周期初始化方法*/

@PostConstruct

publicvoid init(){

System.out.println("初始化池对象");

}

/**使用此注解修饰的方法为对象生命周期销毁方法*/

@PreDestroy

publicvoid destory(){

System.out.println("销毁池对象");

}

}

说明:生命周期方法注解需要在JDK1.7以后版本使用

1.2.4.  Bean对象自动装配注解应用

Spring管理的Bean对象可以采用自动装配机制为属性赋值.基于注解方式进行自动装配,一般需要使用@Autowired,@Qualifier,@Resource这些注解.

1)   @Autowired 可以修饰属性,构造方法,set方法,默认依据类型(属性类型,参数类型)为属性注入值.假如Spring容器中有多个相同类型的值,会参考名字进行匹配查找(属性名,set方法参数名,构造方法参数名),假如名字有相同的则注入,没有相同的会注入失败.

2)   @Qualifier 配合@Autowired注解按名字为属性注入值.

3)   @Resource 可以修饰属性或set方法,默认依据名字(属性名,set方法名)为属性注入值.假如spring容器中有名字相同但类型不同的bean就会注入失败,当没有找到对应名字的bean对象,此时会依据类型再次进行查找,假如相同类型则

直接注入,当有多个相同类型可能会注入失败(假如是按set方法进行注入,依据方法名字没找到,还会按参数类型查找,对应类型有多个,还可能会按参数名查找,假如没找对应的,则注入失败).

对象架构图分析:

应用案例分析:

@Service

publicclass SysConfigServiceImplimplements SysConfigService{

@Autowired

@Qualifier("configDao")

private SysConfigDao sysConfigDao;

}

@Controller

publicclass SysConfigController {

//默认先按属性名进行依赖查找,找不到则按类型进行查找.

@Resource

private SysConfigService sysConfigService;

}

2.SpringIOC注解应用进阶

2.1.   @ComponentScan注解应用

@ComponentScan注解通常用于定义在配置类上,用于配置对哪些包中类进行扫描,例如

@ComponentScan("com.jt")

publicclass AppConfig {

}

当容器初始化可以获取AppConfig类对象,通过反射获取类对象上的@ComponentScan注解,并获取注解中定义的包路径,再从指定路径下获取包下的类

基于注解方式进行容器初始化

AnnotationConfigApplicationContext ctx=

new AnnotationConfigApplicationContext(AppConfig.class);

容器初始化以后就可以从容器获取由Spring管理的Bean对象了。

2.2.   @Bean注解应用

@Bean注解一般用于配置类中,用于修饰相关方法,通过这样的方法返回相关对象,然后将这个对象会存储在spring容器中。

例如:

@PropertySource("config.properties")

@ComponentScan("com.jt")

publicclass AppConfig {//spring-configs.xml

/**

* 思考:不是自己写的类假如希望通过

* 注解的方式交给spring管理,

* 那如何实现?

* @return

*/

@Bean//bean存储时默认名字为方法名

public Date newDate(){

System.out.println("newDate()");

//return new Date();

return Calendar.getInstance().getTime();

}

}

课堂练习一:通过注解方式整合Druid连接池对象,并将此对象交给Spring管理。

代码实现:

在配置类中(例如AppConfig)添加如下方法,创建Druid对象(首先要添加mysql驱动和druid依赖)。

@Bean("dataSource")

public DruidDataSource newDruidDataSource(){

//1.构建对象

DruidDataSource ds=new DruidDataSource();

//2.设置属性

ds.setDriverClassName("com.mysql.jdbc.Driver");

ds.setUrl("jdbc:mysql:///jtsys");

ds.setUsername("root");

ds.setPassword("root");

//3.返回对象

returnds;

}

编写单元测试类对DruidDataSource对象进行测试。

2.3.   @Value与@PropertySource注解应用

@PropertySource 注解修饰类时可以用于引入properties相关文件,然后借助@Value注解获取文件中相关内容。

现在类路径下有configs.properties文件,其内容如下:

jdbcDriver=com.mysql.jdbc.Driver

jdbcUrl=jdbc:mysql:///cgbmybatis

jdbcUser=root

jdbcPassword=root

在Spring管理的Bean对象中获取文件内容,然后注入给指定属性,例如

@Configuration

@PropertySource("classpath:configs.properties")

@ComponentScan("com.jt")

publicclass AppConfig {//spring-configs.xml

@Bean("dataSource")

public DruidDataSource newDruidDataSource(

@Value("${jdbcUrl}")String url,

@Value("${jdbcDriver}")String driver,

@Value("${jdbcUser}")String username,

@Value("${jdbcPassword}")String password){

DruidDataSource ds=new DruidDataSource();

ds.setDriverClassName(driver);

ds.setUrl(url);

ds.setUsername(username);

ds.setPassword(password);

returnds;

}

}

${key}为spring中的EL表达式,可以从configs.properties文件中获取指定内容。

其中key为properties文件中等号左边的内容。

编写单元测试类,对如上方法进行测试,获取数据源对象,然后通过此对象获取连接并输出。

档铺网——在线文档免费处理

原文地址:https://www.cnblogs.com/wood-life/p/10292743.html

时间: 2024-09-30 09:37:21

Spring IOC高级的相关文章

我讨厌注解式的Spring IOC

spring的ioc,原本是在"实例"层面上的.同样的一个类,我可以通过多个<bean>标签,得到多个实例.并且,每个bean中的属性配置都可以不一样,从而使我得到多个不一样的实例. 举个例子.我写过这样一个类: class A implements AI{ private B b; private C c; private D d; @Override public void aService(){ b.bService(); c.cService(); d.dServi

Spring:源码解读Spring IOC原理

Spring IOC设计原理解析:本文乃学习整理参考而来 一. 什么是Ioc/DI? 二. Spring IOC体系结构 (1) BeanFactory (2) BeanDefinition 三. IoC容器的初始化 1. XmlBeanFactory(屌丝IOC)的整个流程 2. FileSystemXmlApplicationContext 的IOC容器流程 1.高富帅IOC解剖 2. 设置资源加载器和资源定位 3.AbstractApplicationContext的refresh函数载入

Spring IOC 和 AOP

Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架. 1.控制反转(IOC)/依赖注入(DI): 在传统的程序设计中,当调用者须要被调用者的协助时,通常由调用者来创建被调用者的实例. 但在spring里创建被调用者的工作不再由调用者来完毕.因此控制反转(IoC),为什么称为反转呢?反转是相对于正向而言的,那么什么算是正向的呢?考虑一下常规情况下的应用程序,假设要在A里面使用C,你会怎么做呢?当然是直接去创建C的对象,也就是说,是在A类中主动去获取所须要的外部资源C.这样的

Spring?IOC设计原理解析:本文乃学习整理参考而来

Spring IOC设计原理解析:本文乃学习整理参考而来 一. 什么是Ioc/DI? 二. Spring IOC体系结构 (1) BeanFactory (2) BeanDefinition 三. IoC容器的初始化 1. XmlBeanFactory(屌丝IOC)的整个流程 2. FileSystemXmlApplicationContext 的IOC容器流程 1.高富帅IOC解剖 2. 设置资源加载器和资源定位 3.AbstractApplicationContext的refresh函数载入

介绍 Spring IoC 容器和 bean

简介 本章涵盖了 Spring Framework实现控制翻转 (IoC) 的原则. IoC 有时也被称为依赖注入 (DI).这是一个对象定义他们依赖的过程,其中对象之间的相关性,也就是说,它们一起工作,只能通过构造函数参数,参数工厂方法或设置在其构造后的对象实例或者是从一个工厂方法返回的对象实例的属性上.容器在创建的 bean 注入这些依赖.这个过程是根本的反转,因此称为控制反转(IoC),bean 本身通过直接构造类,或作为 Service Locator(服务定位器)模式的机制,来控制其依

Spring:源码解读Spring IOC原理--(转载)

转自:http://www.cnblogs.com/ITtangtang/p/3978349.html 这篇文章个人觉得整理的很不错,很值得学习,为了方便自己学习和大家学习,特转载此文保留.请尊重原创~~ Spring IOC设计原理解析:本文乃学习整理参考而来 一. 什么是Ioc/DI? 二. Spring IOC体系结构 (1) BeanFactory (2) BeanDefinition 三. IoC容器的初始化 1. XmlBeanFactory(屌丝IOC)的整个流程 2. FileS

spring IOC的基础

IOC的基础下面我们从IOC/AOP开始,它们是Spring平台实现的核心部分:虽然,我们一开始大多只是在这个层面上,做一些配置和外部特性的使用工 作,但对这两个核心模块工作原理和运作机制的理解,对深入理解Spring平台,却是至关重要的:因为,它们同时也是Spring其他模块实现的基础.从 Spring要做到的目标,也就是从简化Java EE开发的出发点来看,简单的来说,它是通过对POJO开发的支持,来具体实现的:具体的说,Spring通过为应用开发提供基于POJO的开发模式,把 应用开发和复

Spring IOC及AOP学习总结

一.Spring IOC体系学习总结: Spring中有两个容器体系,一类是BeanFactory.另一类是ApplicationContext.BeanFactory提供了基础的容器功能.ApplicationContext则是基于BeanFactory建立的一套更加丰富的容器体系,基于ApplicationContext构建了Spring AOP体系(基于AOP体系又构建了声明式事务模型),I18n的支持,基于观察者模式的事件模型,多渠道的Bean资源的载入(比如从文件系统,从interne

Spring IOC原理解读 面试必读

Spring IOC设计原理解析:本文乃学习整理参考而来 一. 什么是Ioc/DI? 二. Spring IOC体系结构 (1) BeanFactory (2) BeanDefinition 三. IoC容器的初始化 1. XmlBeanFactory(屌丝IOC)的整个流程 2. FileSystemXmlApplicationContext 的IOC容器流程 1.高富帅IOC解剖 2. 设置资源加载器和资源定位 3.AbstractApplicationContext的refresh函数载入