您的位置:首页 > 编程语言 > Java开发

Spring实战学习1-装配bean

2018-10-31 17:02 78 查看

1、spring装配bean的机制

Spring容器负责创建应用程序中的bean并通过DI来协调这些对象的关系。
它提供了三种主要的装配机制:
(1)在XML中进行显示配置
(2)在java中进行显示配置[推荐]
(3)隐式的bean发现机制和自动装配[强烈推荐]

2、隐式的bean发现机制和自动装配

2.1、自动化装配bean

Spring从两个角度来实现自动化装配

(1)组件扫描:Spring会自动发现应用上下文所创建的bean
(2)自动装配:Spring自动满足bean之间的依赖

注解:

@Component:该注解表明该类会作为组件类,并告知Spring要为这个类创建bean

注:组件扫描默认是不开启的,需要显式配置一下

@ComponentScan:在Spring中启用组件扫描,如果没有其他配置的话,该注解默认会扫描与配置类相同的包。

public interface CompactDisc{ void play();}

//Spring容器创建bean
@Component
public class SgtPeppers implements CompactDisc {

private String title = "Sgt.Pepper";
private String artist = "The Beatles";

@Override
public void play() {
// TODO Auto-generated method stub
System.out.println("title:"+title+"artist:"+artist);
}

}

//启动component扫描
@Configuration
@ComponentScan
public class CDPlayerConfig {

}

2.2为组件扫描的bean命名

Spring应用上下文中所有的bean都会给定一个ID,默认ID为类名的第一个字母变成小写。

如果想要设置不同的ID,需要将期望的ID作为值传递给@Component注解。

@Component("myLoveCd")
public class SgtPeppers implements CompactDisc {

}

还有另外一种bean命名方式,使用java依赖注入中所提到的@Named注解来设置bean的ID

@Named("myLoveCd")
public class SgtPeppers implements CompactDisc {
}

推荐使用@Component

2.3设置组件扫描的基础包
@Configuration
@ComponentScan("spring")
public class CDPlayerConfig {

}

清晰的说明你设置的是基础包,通过basePackages属性进行配置,当然也可以这是多个包

@Configuration
@ComponentScan(basePackages = {"spring","hello"})
public class CDPlayerConfig {

}

除了包设置为简单的String类型之外,@ComponentScan还提供了另外的方法,将其指定为包中所包含的类或接口

@Configuration
//@ComponentScan(basePackages = {"spring","hello"})
@ComponentScan(basePackageClasses= {CDPlayer.class,DVDPlayer.class})
public class CDPlayerConfig {

}

3、通过java代码装配bean

3.1创建配置类
@Configuration
public class CDPlayerConfig {

}

创建JavaConfig类的关键在于为其添加@Configuration注解,该注解表明这个类是一个配置类,该类应该包含在Spring应用上下文中如何创建bean的细节。

3.2声明简单的bean

在JavaConfig声明bean,编写一个方法,然后给这个方法添加@Bean注解

@Bean(name="sgt")
public CompactDisc sgtPeppers() {
return new SgtPeppers();
}

@Bean注解会告诉Spring这个方法会返回一个对象,该对象要注册为Spring应用上下文中的bean。
默认情况下,bean的ID与带有@Bean注解的方法名是一样的。也可以重命名该方法,通过name属性指定一个不同的名字

3.3借助JavaConfig实现注入

在JavaConfig中装配bean的最简单的方法就是引用创建bean的方法

@Bean
public CDPlayer cdPlayer() {
return new CDPlayer(sgtPeppers());
}

//或者
@Bean
public CDPlayer cdPlayer(CompactDisc sgtPeppers) {
return new CDPlayer(sgtPeppers);
}

使用Setter方法实现注入

@Bean
public CDPlayer cdPlayer2(CompactDisc cd) {
CDPlayer cdPlayer = new CDPlayer(cd);
cdPlayer.setCd(cd);
return cdPlayer;
}

4、在JavaConfig中引用XML配置

详情见:http://yuedu.163.com/book_reader/247cb8bba21a4b6c8ec4efd8e28c0311_4

最为简单的Spring XML配置如下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>

用来装配bean的最基本的XML元素包含在spring-北安市模式之中,在上面这个XML文件中,它被定义为根命名空间。是该模式中的一个元素,它是所有Spring配置文件的根元素。

4.1、声明一个简单的
<bean class="com.example.demo.spring.CDPlayer">
</bean>

这里声明一个简单的bean,创建这个bean的类通过class属性来指定,并且使用全限定类名

可以借助id属性,为每隔bean设置一个自己定义的名字:

<bean id = "cdPlayer" class="com.example.demo.spring.CDPlayer">
</bean>
4.2借助构造器注入初始化bean

两种方式实现构造器的注入bean

//第一种
<bean id = "cd" class = "com.example.demo.spring.SgtPeppers"/>

<bean id = "cdPlayer" class="com.example.demo.spring.CDPlayer">
<constructor-arg ref="cd"></constructor-arg>
</bean>

//第二种
<bean
4000
id = "cd" class = "com.example.demo.spring.SgtPeppers"/>

<bean id = "cdPlayer" class="com.example.demo.spring.CDPlayer" c:cd-ref="cd" />
4.3、设置属性
<bean id = "cd" class = "com.example.demo.spring.SgtPeppers"/>

<bean id = "cdPlayer" class="com.example.demo.spring.CDPlayer">
<constructor-arg ref="cd"></constructor-arg>
<property name="cd" ref = "cd"></property>
</bean>

元素为属性Setter方法多提供的功能与元素为构造器所提供的功能是一样的

总结:

Spring框架的核心是Spring容器。容器负责管理应用中组件的生命周期,它会创建这些组件并保证它们的依赖能够得到满足。在Spring中,这些配置方案不是互斥的,可以混合使用。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: