上篇中谈到了Spring的装配知识
一、那如何告诉Spring你需要创建哪些Bean并且如何将其装配在一起?
Spring提供了三种主要的装配机制分别如下
1、在XML中进行显示配置
2、在Java中进行显示配置
3、隐式的bean发现机制和自动装配--自动化配置(最强大,最为推荐)
乍看上去三种方案会使Spring变得复杂,每种方案有自己的场景依据项目情况而定,但并不是我们只能选择其中的一种方案,Spring配置风格是可以互搭的,你可以选择一使用XML装配一部分Bean,使用Java装配另一部分Bean,而将剩余的Bean让Spring自动发现;
即便如此,尽可能的使用自动装配机制是最好的方案,显示配置越少越好。(干货:spring装配方案可以互搭灵活使用,建议尽可能使用自动装配机制)
二、自动化装配是怎么实现的呢?
Spring从两个角度来实现自动化装配
1、组件扫描:spring会自动发现应用上下文中所创建的Bean
2、自动装配:spring自动满足bean之间的依赖
说明:组件扫描和自动装配带来最直观的效果就是“显示配置降低至最低”
三、spring上下文怎么知道哪些Bean需要被创建
方式一;
@Component
向spring表明该类会作为组件类,需要spring为这个类创建bean
@Component可以为扫描的组件命名,默认会依据类名首字母小写进行命名,也可以自定义,如下所示(干货:@Component命名默认首字母小写,可自定义)
@Component("file2") public class FileUploadProgressListener implements ProgressListener{ private HttpSession session; public void setSession(HttpSession session){ this.session=session; Progress status = new Progress();//保存上传状态 session.setAttribute("status", status); }
方式二(不常用)
@Named
四、启用扫描
xml配置方式
<!-- 自动扫描controller包下的所有类,使其认为spring mvc的控制器 --> <context:component-scan base-package="com.*.*.controller" />
方式一:指定包名进行该基础包下所有子包的扫描,支持设置多个基础包(干货---base-package可设置多个基础包)
base-package:设置扫描基础包
<context:component-scan base-package="com.tuzuan.controller,com.tuzuan.admin.controller"/>
方式二:指定类或接口进行扫描,这些类所在的包将会作为组件扫描的基础包(干货---base-package可设置多个基础类或接口)
basePackageClasses
五、如何自动装配?
方式一:Spring注解方式
@Autowired
不管是构造器、Setter方法还是其他的方法,Spring都会尝试满足方法参数上所声明的依赖;
例如:Setter方法
@Autowired
private T_UserroleService t_UserroleService;
@Autowired
private T_FuninfoService t_funinfoService;
构造方法注入:
public class Boss {
private Car car;
private Office office;
@Autowired
public Boss(Car car ,Office office){
this.car = car;
this.office = office ;
}
}
@Autowired(required=false)
public MisZhangKnight(KillLongQuest quest){//Quest被注入进来
this.quest=quest;
}
方式二:@Inject Java依赖注入规范,它与@Autowired基本类似,大多数场景下可互相替换使用
六、如何将第三方类库添加至你的应用?Java显示配置
因为无法再在第三方程序中添加@Componet和@Autowired注解,因此无法使用自动化配置方案,那么就得通过显示配置方式实现,比较推荐的方式是JavaConfig
干货(引人JavaConfig配置类)
@Configuration:表明该类为配置类
@Bean:在Spring上下文中创建一个对象,默认该对象ID为@Bean所标示的方法名,如果你想自定义可在@Bean中使用name属性区分
七、JavaConfig如何装配组件之间的关系?
方式一:调用方法来引入Bean
八、xml方式进行显示配置
1、只有在xml中进行<bean>的声明的方式
2、构造器注入
方法一:<constructor-arg ref>
<!-- JDBC namedParameterJdbcTemplate配置 -->
<bean id="namedParameterJdbcTemplate"
class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg ref="dataSource" />
</bean>
方法二:c-命名空间(spring3.0引人)
3、参数注入
方法一:<property>
<!-- 为CommonJdbcDao类注入jdbcTemplate -->
<bean id="CommonJdbcDao" class="com.platform_manager.common.dao.CommonJdbcDao">
<property name="jdbcTemplate">
<ref bean="jdbcTemplate" />
</property>
<property name="namedParameterJdbcTemplate">
<ref bean="namedParameterJdbcTemplate" />
</property>
</bean>
方法二:p-命名空间+util-命名空间
九、采用xml方法进行显示配置与java方式配置的缺点(干货---javaconfig比xml配置方式灵活)
1、在javaconfig中可以通过任意可以想象到的方法来创建bean实例
2、xml中bean所指的class发生重命名,xml中需重新申明
SpringToolSuite
十、导入与混合装配
@import配置类组合
@ImportResource基于XML的配合与基于Java的配置的组合
总结:
mindjet过期了,尝试用百度脑图画,刚开始很好用,图复杂这玩意就没法用了,搞个破图画了一个小时