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

Spring IOC

javaConfig与XML配置对比

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

借助构造器注入 初始化bean

  • 元素
  • 使用spring3.0 所引入的c-命名空间
    Spring IOC
  1. 注入bean
  • Spring IOC
  • Spring IOC
  1. 注入字面量
  • Spring IOC
  • Spring IOC
  1. 装配集合 (c-命名空间无法处理的问题)
    • 装配null
      Spring IOC

    • 装配list 集合
      Spring IOC

    • 装配set集合
      Spring IOC
      构造器注入 还是属性注入,与组合和聚合对应,必含的属性用组合,采用构造器注入

通过属性初始化bean

1、<property name="" ref=""/>
    <property name="" value=""/>
2、<p:pName-ref=""/>
    <p:pName=""/>
  1. 注入bean
  • Spring IOC
  • Spring IOC
  1. 注入字面量
  • Spring IOC
  • Spring IOC
    3 util- 命名空间
  • Spring IOC
  • Spring IOC

隐式的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;

  • @Inject 没有required属性

默认自动装配

  • 默认情况 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
    Spring IOC
  • Spring IOC
  1. JavaConfig引入 xml
    Spring IOC
    Spring IOC

在XML配置中引用 JavaConfig

  1. 在xml中引入xml
    Spring IOC
    Spring IOC
  2. 在xml中引入JavaConfig
    Spring IOC
  3. 在xml中引入 xml和JavaConfig
    Spring IOC

Spring 高级技术

XML的bean 配置的继承

Spring IOC

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

Spring IOC
Spring IOC

bean 的依赖关系

Spring IOC

bean的作用域

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

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

Spring 特殊点

  1. 引入了自动扫描之后,添加了spring-context。
    spring-context 启动了 Cglib代理, 不存在抽象bean。所以一图可以用 abstract,而二图不行。
    Spring IOC
    Spring IOC
上一篇:百度快照秒更新-百度快照投诉批量更新推送程序


下一篇:Python用selenium实现模拟登录,各种抢票脚本的第一步