Bean的装配⽅式
Bean的装配可以理解为依赖关系注⼊,Bean的装配⽅式即Bean的依赖注⼊的⽅式。
Spring容器⽀持多种形式的Bean的装配⽅式,如基于XML的装配、基于注解的装配、⾃动装配等。其中最常⽤的是基于注解的装配。
基于XML的装配
Spring提供了两种基于XML的装配⽅式:设值注⼊、构造注⼊
Spring实例化Bean的过程中,Spring⾸先会调⽤Bean的默认构造⽅法来实例化Bean对象,然后通过反射的⽅式调⽤setter⽅法来注⼊属性值。
设值注⼊:
Bean类必须提供⼀个默认的⽆参构造⽅法
Bean类必须为需要注⼊的属性提供对应的setter⽅法
在配置⽂件中,需要使⽤ <property>元素为每个属性注⼊值
构造注⼊:
Bean类必须提供有参构造⽅法
在配置⽂件中,需要使⽤<constructor-arg>元素来定义构造⽅法的参数,也可以使⽤其value属性来设置该参数的值
基于注解的装配
Spring中定义了⼀系列的注解,常⽤的注解如下:
@Component:描述Spring中的Bean,可以作⽤在任何层次
@Repository:⽤于将持久层(Dao层)的类标识为Spring中的Bean
@Service:⽤于将业务层(Service层)的类标识为Spring中的Bean
@Controller:⽤于将控制层(Controller层)的类标识为Spring中的Bean
@Autowired:⽤于对Bean的属性变量、属性的setter⽅法以及构造⽅法进⾏标注,配合对应的注解处理器完成Bean的⾃动装配⼯作。默认按照Bean的类型进⾏装配
@Resource:其作⽤与@Autowired⼀样。其区别在于@Autowired默认Bean的类型装配,⽽@Resource默认按照Bean的实例名称进⾏装配
resource和autowired注解的区别@Resource中有两个重要属性:name和type。Spring将name属性解析为Bean实例名称,type属性解析为Bean实例类型。如果指定name属性,则按实例名称进⾏装配;如果指定type属性,则按Bean类型进⾏装配;如果都不指定,则先按Bean的实例名称装配,如果不能匹配,再按照Bean类型进⾏装配;如果都⽆法匹配,则抛出 NoSuchBeanDefinitionException异常。
@Qualifier:与@Autowired注解配合使⽤,会将默认的按Bean类型装配修改为Bean的实例名称装配,Bean的实例名称由
@Qualifier注解的参数指定
@Repository("accountDao")
public class AccountDaoImpl implements AccountDao {
}
@Service("accountService")
public class AccountServiceImpl implements AccountService {
@Resource(name="accountDao")
private AccountDao accountDao;
}
此时,在配置⽂件中,Spring注解提供了另外⼀种⾼效的注解配置⽅式。
含义是:告知Spring在创建容器时要扫描的包(通知Spring扫描指定包下的所有Bean)
<context:component-scan base-package="cn.itcast"></context:component-scan>
⾃动装配
⾃动装配:将⼀个Bean⾃动地注⼊到其他Bean的Property中
Spring的 <bean>元素中包含⼀个 autowire 属性,我们可以通过设置 autowire 的属性值来⾃动装配Bean。autowire属性的5个值:
default(默认):由<beans>的default-autowire属性值来确定。
byName:根据属性的名称⾃动装配。容器将根据名称查与属性完全⼀致的Bean,并将其属性⾃动装配byType:根据属性的数据类型⾃动装配。
constructor:根据构造函数参数的数据类型,进⾏byType模式的⾃动装配
no:在默认情况下,不使⽤⾃动装配,Bean依赖必须通过ref元素定义

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。