Java-Spring专题:Bean的装配

上篇中谈到了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 ;     
    } 

}
装配过程被注入对象不存在怎么办?
required属性
	@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过期了,尝试用百度脑图画,刚开始很好用,图复杂这玩意就没法用了,搞个破图画了一个小时哭




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值