微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Spring IOC

文章目录

  • 基于xml的装配方式
  • 基于注解的装配方式
    JavaConfig 的装配方式,也属于注解。
    之前的简单注解,是没法启动的,必须借助于xml 启动扫描和自动装配
    有了JavaConfig 之后,可以通过JavaConfig启动 扫描和自动装配
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=CdplayerConfig.class)
@ContextConfiguration({"classpath:applicationContext.xml"})
@ContextConfiguration(locations={"classpath:applicationContext.xml"})
	
	@Configuration
	@ComponentScan
	@ComponentScan("com.zzl")
	@ComponentScan(basePackages={"com.zzl.autowired","com.zzl.service"})
	@ComponentScan(basePackageClasses={Service.class,SgtPeppers.class})
		@Bean
		
		@Component
		@Component("loveHeartsClub")
	
	<context:annotation-config/>	// 启动自动装配,不管是 注解生成的bean,还是xml生成的bean。会经过 Autowired 装配到对象上去
	<context:component-scan base-package=""></context:component-scan>	// 包含<context:annotation-config/>的功能,并且还会自动扫描生成bean
	// 生成bean,和装配bean,是两回事,上面那个只负责装配容器中的 bean,至于容器中的bean怎么来的,它并不管
	// 下面这个不仅能生成bean,还可以 利用注解,装配bean
		
	@Autowired() // required=ture
	@Autowired(required=false) // 可以加在属性上、构造器上、set方法上、普通方法上 为入参装配bean
	@Inject // 相当于  @Autowired(required=false) 
	@Qualifier("dance") // 指定用哪一个bean装配

Spring 注意事项

  1. Spring 3点几的版本 AOP自动注解不支持 jdk1.8
  2. xml中配置的bean ,属性必须配置pulic的set方法

Spring 容器启动

ApplicationContext context = new ClasspathXmlApplicationContext("applicationContext.xml");

ApplicationContext context = new AnnotationConfigApplicationContext(ConcertConfig.class);

一、

二、

Spring 配置的可选方案

在XML中进行显示配置

创建XML配置规范

声明一个简单的bean

在这里插入图片描述

javaConfig与XML配置对比

  • JavaConfig 是通过方法,返回对象,然后将的对象加入到spring bean容器中,进行统一管理,创建方式更容易让人接受,使用更简单,功能更强大,比如创建时加入一些判断,数据处理等。
  • 没法统一重命名

    在这里插入图片描述

借助构造器注入 初始化bean

  • 元素
  • 使用spring3.0 所引入的c-命名空间

    在这里插入图片描述

  1. 注入bean
  • 在这里插入图片描述

  • 在这里插入图片描述

  1. 注入字面量
  • 在这里插入图片描述

  • 在这里插入图片描述

  1. 装配集合 (c-命名空间无法处理的问题)
    • 装配null

      在这里插入图片描述

    • 装配list 集合

      在这里插入图片描述

    • 装配set集合

      在这里插入图片描述


      构造器注入 还是属性注入,与组合和聚合对应,必含的属性用组合,采用构造器注入

通过属性初始化bean

1、<property name="" ref=""/>
    <property name="" value=""/>
2、<p:pName-ref=""/>
    <p:pName=""/>
  1. 注入bean
  • 在这里插入图片描述

  • 在这里插入图片描述

  1. 注入字面量
  • 在这里插入图片描述

  • 在这里插入图片描述


    3 util- 命名空间
  • 在这里插入图片描述

  • 在这里插入图片描述

隐式的bean发现机制和自动装配

spring容器认禁用注解装配,可以在xml中配置启动它 <context:annotation-config> —这个只是支持自动装配,但并不会扫描生成bean
<context: component-scan > xml中配置这个,不仅包含上面的自动装配功能,还会启动spring的自动检测bean和定义bean

组件扫描:

  • 启动扫描
  1. 在xml中配置<context:component-scan base-package=”com.zzl”> 元素,配置扫描地址。
  2. @ComponentScan 认会扫描与配置类同包及子包
    • @ComponentScan(“com.zzl”)//扫描一个
    • @ComponentScan(basePackages={“com.zzl.autowired”,“com.zzl.service”})//扫描多个包
    • @ComponentScan(basePackageClasses={Service.class,SgtPeppers.class})//扫描多个类及其同包和子包
  • 声明创建bean
  1. @Component 声明为组件,生成类名首字母小写的 实例
    a) @Component(“bootStartTest”) //生成指定变量名的实例。
  2. @Configuration 声明为java配置文件
  3. @Controller – 标识该类定义未Spring MVC controller
  4. @Service ---- 标识该类定义为服务类 --service层
  5. @Repository —标识该类定义为数据仓库 --dao层

自动装配 @Autowired

使用的是byType的自动装配,如果一个接口类有多个实现类,也可以只不过不会装配

  • @Autowired
    1. 可以注解成员变量
    2. 可以注解在构造器的入参上面。
    3. 可以注解在set方法上面做入参。
    4. 普通入参方法上面
  • @Autowired(required=false) – 此时需要谨慎对待,如何使用的时候未做null检测,会出现NullPointerException
    @Autowired
    @Qualifier("song")//指定注解 名称为song的bean
    public ITalent talent;

自动装配

  • 认情况 xml中的beans 的 default-autwire 被设置未none----每一个文件都可以有一个default-autwire,不同的文件可以有不同的装配方式,不同的bean也可以指定不同的装配方式。bean上的装配方式可以对beans中的进行覆盖

在Java中进行显示配置

javaConfig装配

  • @Configuration 注解java类,表明这个类是配置类

  • @Bean 注解 带对象返回值的方法。 返回的对象,会被spring 加入到 bean容器中。

  • @Bean(name=”lovely”) 指定对象的名称
    这种方式可以更自由的控制生成bean的

导入和混合配置

在JavaConfig中引用XML配置

  1. 单个JavaConfig 里面的内容非常多,引入多个JavaConfig

    在这里插入图片描述

  • 在这里插入图片描述

  1. JavaConfig引入 xml

    在这里插入图片描述


    在这里插入图片描述

在XML配置中引用 JavaConfig

  1. 在xml中引入xml

    在这里插入图片描述


    在这里插入图片描述

  2. 在xml中引入JavaConfig

    在这里插入图片描述

  3. 在xml中引入 xml和JavaConfig

    在这里插入图片描述

Spring 高级技术

XML的bean 配置的继承

在这里插入图片描述

bean的继承,抽象Bean, 做为 创建bean的模板

在这里插入图片描述


在这里插入图片描述

bean 的依赖关系

在这里插入图片描述

bean的作用域

使用bean的 scope属性来配置bean的作用域

  1. singleton:认值,容器初始化时创建bean实例,在整改容器的声明周期只创建一个bean,相当于单例
  2. prototype:原型的,容器初始化不创建bean实例,而每次请求时都创建一个新的bean实例。

    在这里插入图片描述

Spring 特殊点

  1. 引入了自动扫描之后,添加了spring-context。
    spring-context 启动了 cglib代理, 不存在抽象Bean。所以一图可以用 abstract,而二图不行。

    在这里插入图片描述


    在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。