SpringInAction第二章学习笔记:Spring装配Bean

第二章:装配Bean

Spring容器负责把需要相互协作的对象引用赋予各个对象。创建应用对象之间协作关系的行为通常称为装配(wiring)。
2.1、Spring配置的可选方案
·XML显式配置
·java类中进行显式配置
·隐式的bean发现机制和自动装配

2.2自动化装配bean
Spring从两个角度来实现自动化装配:
·组件扫描(component scanning) 自动发现应用上下文中所创建的bean
·自动装配(autowiring) Spring自动满足bean之间的依赖

组件扫描

1、开启自动扫描注解
组件扫描默认是不开启的,所以需要手动开启。使用@Configuration注解表示类为配置类,@ComponentScan表示扫描此类以及此类所在的包下。
在这里插入图片描述
2、编写bean
此类必须与上面的config在同个包下(因为声明了@ComponentScan,否则需要声明扫描的包),使用@Service(@ComponentScan或者@Controller也一样)声明该类会作为组件类,告知spring扫描的时候要创建此bean。
在这里插入图片描述
3、测试
在Junit中进行测试,注意,必须用@ContextConfiguration告知spring要配置启动config配置类,此时就可以实现注入Service bean。
在这里插入图片描述

·上面的方法是基于java类的配置,也可以用XML来启用组件扫描,仅需要如下:

在这里插入图片描述
在这里插入图片描述

默认Spring为bean设置的ID是把类名的第一个字母改为小写,也可以手动给bean赋ID,使用@Component(“myBeanName”)
如果config类和bean所在的包不同,想要让config类去扫描指定的包,使用basePackages 或basePackageClasses 即可声明扫描包或者某个类,如下:
在这里插入图片描述

自动装配
自动装配就是让Spring自动满足bean依赖的一种方法,在应用上下文寻找某个bean需求的其他bean。使用@Autowired注解。

@Autowired可以注解在构造器,Setter方法或其他的方法,也可以直接注解在属性对象上。
在这里插入图片描述

此时如果找不到相关类型的bean时,则会抛出异常,我们可以使用注解声明表示不是必须的,此时找不到就不会抛出异常。
在这里插入图片描述

如果找到了多个bean都能满足依赖关系的话,则Spring会抛出异常,表示没有明确选择哪个bean进行自动装配。

·@Autowired和@Inject和@Resource的区别
@Autowired是Spring自带的注解(使用Class做匹配区分装配哪个bean,如果要用bean的ID做匹配,需要加**@Qualifier**(“XXX”)注解)
@Inject注解进行自动装配(与autowired基本一样,区别是Autowired带一个required选项,但是要以ID匹配时加的是@Name)
@Resource注解注入则不同,此注解默认是使用bean的ID做匹配。

2.3通过java代码手动装配bean
第三方的jar包中的类就无法在其中写注解,所以Spring还提供了手动装配bean的方式。此时可以选择java代码装配或者XML配置装配。

java代码装配
实例如下,添加@Configuration,告知Spring这是一个配置类,在其中使用@Bean标签,告诉Spring为此方法创建一个Bean。 Bean的ID和方法名一样,也可以使用@Bean(name = “xxx”)指定生成的Bean的ID。
实现注入的方式在下图也提现了,最简单的方式就是引用创建bean的方法。(因为car()方法上添加了@Bean注解,Spring会拦截所有对他的调用,确保直接返回该方法所创建的bean,不是每次都对方法进行实际调用new)
在这里插入图片描述
也可以直接在参数中传入一个参数,这样子Spring会自动找寻该类型的Bean然后传入给此方法。这样子的好处是 Car类的声明可以放到其他配置类中(或者XML),推荐使用。 同理@Bean也可以声明在setter方法等其他地方。
在这里插入图片描述

2.4通过XML装配Bean
如下,类似于@Configuration,而类似于@Bean
如果不指定id=,则默认id的值为包名加类名加计数(com.gjsyoung.test.domain.Car#0,#0表示第几个,如果是#1表示第二次创建此bean),用给属性设置值,value设置普通属性,ref设置引用属性。也可以使用调用构造器设置值。也可以使用或标签装配List/Set
在这里插入图片描述

2.5导入和混合配置
可以同时使用自动化和显式子配置。

在java配置类导入另外的配置:
在这里插入图片描述
现在car这个bean被声明在另外一个java配置类中,使用@Import导入另外一个配置类。

使用@ImportResource(xml)加载另外一个XML
同理,在car.xml中配置car这个bean,需要使用@ImportResource导入一个xml配置文件。
在这里插入图片描述

在XML配置中导入
·XML中import另一个xml,相当于上面的@ImportResource,没有XML元素能够导入JavaConfig类,但是可以用bean标签导入一个配置类
在这里插入图片描述
在这里插入图片描述

可以使用一个更高级的配置类(根配置)来专门加载这些配置。专门做导入的一个配置类,在该类中使用@componentScan和context:component-scan

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录 第一部分spring的核心 第1章开始spring之旅 1.1spring是什么 1.2开始spring之旅 1.3理解依赖注入 1.3.1依赖注入 1.3.2di应用 1.3.3企业级应用中的依赖注入 1.4应用aop 1.4.1aop介绍 1.4.2aop使用 1.5小结 第2章基本bean装配 2.1容纳你的bean 2.1.1beanfactory介绍 2.1.2使用应用上下文 2.1.3bean的生命 2.2创建bean 2.2.1声明一个简单的bean 2.2.2通过构造函数注入 2.3注入bean属性 2.3.1注入简单的数值 2.3.2使用其他的bean 2.3.3装配集合 2.3.4装配空值 2.4自动装配 2.4.1四种自动装配类型 2.4.2混合使用自动和手动装配 2.4.3何时采用自动装配 2.5控制bean创建 2.5.1bean范围化 2.5.2利用工厂方法来创建bean 2.5.3初始化和销毁bean 2.6小结 第3章高级bean装配 3.1声明父bean和子bean 3.1.1抽象基bean类型 3.1.2抽象共同属性 3.2方法注入 3.2.1基本的方法替换 3.2.2获取器注入 3.3注入非springbean 3.4注册自定义属性编辑器 3.5使用spring的特殊bean 3.5.1后处理bean 3.5.2bean工厂的后处理 3.5.3配置属性的外在化 3.5.4提取文本消息 3.5.5程序事件的解耦 3.5.6让bean了解容器 3.6脚本化的bean 3.6.1给椰子上lime 3.6.2脚本化bean 3.6.3注入脚本化bean的属性 3.6.4刷新脚本化bean 3.6.5编写内嵌的脚本化bean 3.7小结 第4章通知bean 4.1aop简介 4.1.1定义aop术语 4.1.2spring对aop的支持 4.2创建典型的spring切面 4.2.1创建通知 4.2.2定义切点和通知者 4.2.3使用proxyfactorybean 4.3自动代理 4.3.1为spring切面创建自动代理 4.3.2自动代理@aspectj切面 4.4定义纯粹的pojo切面 4.5注入aspectj切面 4.6小结 第二部分企业spring 第5章使用数据库 5.1spring的数据访问哲学 5.1.1了解spring数据访问的异常体系 5.1.2数据访问的模板化 5.1.3使用dao支持类 5.2配置数据源 5.2.1使用jndi数据源 5.2.2使用数据源连接池 5.2.3基于jdbc驱动的数据源 5.3在spring里使用jdbc 5.3.1处理失控的jdbc代码 5.3.2使用jdbc模板 5.3.3使用spring对jdbc的dao支持类 5.4在spring里集成hibernate 5.4.1选择hibernate的版本 5.4.2使用hibernate模板 5.4.3建立基于hibernate的dao 5.4.4使用hibernate3上下文会话 5.5spring和java持久api 5.5.1使用jpa模板 5.5.2创建一个实体管理器工厂 5.5.3建立使用jpa的dao 5.6spring和ibatis 5.6.1配置ibatis客户模板 5.6.2建立基于ibatis的dao 5.7缓存 5.7.1配置缓存方案 5.7.2缓存的代理bean 5.7.3注解驱动的缓存 5.8小结 第6章事务管理 6.1理解事务 6.1.1仅用4个词解释事务 6.1.2理解spring对事务管理的支持 6.2选择事务管理器 6.2.1jdbc事务 6.2.2hibernate事务 6.2.3jpa事务 6.2.4jdo事务 6.2.5jta事务 6.3在spring中编写事务 6.4声明式事务 6.4.1定义事务参数 6.4.2代理事务 6.4.3在spring2.0里声明事务 6.4.4定义注释驱动事务 6.5小结 第7章保护spring 7.1springsecurity介绍 7.2验证用户身份 7.2.1配置providermanager 7.2.2根据数据库验证身份 7.2.3根据ldap仓库进行身份验证 7.3控制访问 7.3.1访问决策投票 7.3.2决定如何投票 7.3.3处理投票弃权 7.4保护web应用程序 7.4.1代理springsecurity的过滤器 7.4.2处理安全上下文 7.4.3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值