Spring

Spring配置Bean的方式有两种,第一种是配置xml文件,第二种是基于java注解的配置方式

基于XML配置bean

1、参数通过构造函数配置

<bean id="poeticDuke" class="com.meituan.rc.tuya">
    <constructor-arg value="15">        //说明构造函数第一个参数是个基本类型
    <constructor-arg ref="sonnet29">  //说明构造函数第二个参数是个对象,引用类型
</bean>

2、参数通过setter方法配置

相当于先调用无参构造函数,然后调用setter方法配置属性

<bean id="poeticDuke" class="com.meituan.rc.tuya">
    <property name="age" value="15">               //调用setAge给age属性赋值
    <property name="instrument" ref="saxophone"> //要先将Saxophone声明为一个bean此处才能调用
</bean>

内部bean

如果不想让bean与其他bean共享可以使用内部bean

<bean id="poeticDuke" class="com.meituan.rc.tuya">
    <property name="age" value="15">
    <property name="instrument">
        <bean class="com.meituan.rc.Saxophone"/>  //内部bean,对外不可见。property也可以替换成construcor-arg元素
    </property>
</bean>

bean可以在初始化和销毁时调用某些方法

<bean id="poeticDuke" class="com.meituan.rc.tuya"
    init-method="turnOnLights"        //初始化前调用turnOnLights方法
    destroy-method="turnOffLights"/>  //销毁时调用turnOffLights方法

基于注解配置bean

可以让spring自动扫描指定的包,根据注解查找出能自动注册为spring的类。

<context:component-scan base-package="com.meituan.rc.prophet"></context:component-scan>

该配置会自动扫描com.meituan.rc.prophet的包,并查找使用如下注解标注的类

  • @Component 通用的构造型注解,标识该类为Spring组件
  • @Controller 标识该类定义为SpringMVC controller
  • @Repository 标识该类定义为数据仓库
  • @Service 标识该类定义为服务
    示例:
@Service("guitar") //声明bean的id为guitar
puclic class Instrument{
    ...
}

Instrument将会被自动注册为一个id为guitar的bean

基于java的配置

还可以使用@Bean将方法的返回对象注册为bean,示例

@Bean
public Performer duke(){
    return new Juggler();
}

将返回的Juggler对象注册为bean,方法名作为bean的id

基于注解装配

Spring默认禁用注解装配,需要加入如下代码进行启动

<context:annotation-config>

可以使用@Autowired直接标注属性,这样spring就是自动寻找同类型(Instrument)的bean进行装配。
@Autowired 也可以用于装配方法(写在方法前一行)或者构造器

//装配属性
@Autowired
private Instrument instrument
  
//装配方法参数
@Autowired
public void myInstrument(Instrument instrument){
}

如果spring中有多个同类型的bean则可以使用@Qualifier注解来明确指定id为xxx的bean进行装配

@Autowired
@Qualifier("guitar")
private Instrument instrument

可以理解为@Qualifier注解将ByType类型自动装配转换成了ByName

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容