SpringXML配置和注解配置
XML ⽂件的配置
<bean id="" class="" init-method="" destroy-method="" scope="">
<property name="" value=""></property>
<property name="" ref=""></property>
</bean>
id:被创建的对象的 id
class:要被创建的类对象的类全名
init-method:初始化⽅法
destroy-method:销毁⽅法
scope:对象的作⽤域
name:要被注⼊的数据的名称
value:注⼊数据的值
ref:当注⼊的数据是其他 bean 类型时,其他 bean 类型的名称
常⽤注解配置
⽤于创建对象的注解
注解的作⽤和 xml 配置⽂件中编写 <bean></bean> 标签的功能是⼀样的,即将当前类对象存⼊ Spring 容器中
1. @Componcnt注解:该注解⽤于把当前类对象存⼊ Spring 容器中
该注解的属性:
value:指定 bean 的 id。假如我们没有指定 value 的值,默认为当前类名的⾸字母改⼩写,其余不变的名称。
2. 其中 Spring 还为我们提供了三个作⽤和 @Component ⼀样的注解(使得我们的三层对象更加清晰)
:
@Controller ⼀般⽤在表现层
@Service ⼀般⽤在业务层
@Repository ⼀般⽤在持久层
⽤于改变创建的对象的注⼊数据的注解
1. @Autowritred注解:该注解可以⾃动按照类型注⼊数据到 bean 中
注⼊条件:
spring ioc注解如果 ioc 容器中⽤唯⼀的⼀个 bean 对象类型和要被注⼊的变量类型匹配
如果 ioc 容器中没有对应的 bean 对象类型和要被注⼊的变量类型匹配,那么会抛出异常。
如果 ioc 容器中有多个 bean 对象类型和要被注⼊的变量类型匹配,⾸先会根据 id 来匹配,如果 id 都⼀样,则会根据
要被注⼊的变量的名称匹配,如果变量的名称都⼀样,那么就会抛出异常。
2. @Qualifier注解:该注解,在 @Autowritred 的基础之上,可以添加 value 属性值,指定注⼊的 bean id(需要和 @Autowritred ⼀起使
⽤)
3. @Resource该注解和 @Qualifier 类似,可以指定注⼊的 bean id,但不需要和 @Autowritred ⼀起使⽤。@Resource 单独使⽤。
4. @Value注解:该注解⽤于注⼊基本数据类型和 String 数据类型
该注解的属性:
value:⽤于指定数据的值。可以是 Spring 中的 el 表达式(SpEL)
SpEL 书写格式:${EL 表达式}
说明:
1. @Autowritred@Qualifier@Resource只能注⼊其他 bean 类型的数据,不能注⼊基本数据类型和 String 类型的数据。
2. 集合类型的数据只能通过 XML ⽂件进⾏注⼊。
⽤于改变创建的对象的作⽤范围的注解
@Scope注解:该注解⽤于指定 Bean 的作⽤范围
该注解的属性:
value:指定范围的取值。吃常⽤的取值有:singleton(单例的)、prototype(多例的)
默认为单例的(对象只创建⼀次)
⽣命周期相关的注解
1. @PreDestroy销毁⽅法的注解
2. @PostConstruct初始化⽅法的注解
Spring 中的新注解
@Configuration 注解
⽤于指定当前类是⼀个Spring 配置类,当创建容器时会从该类上加载注解。获取容器时需要使⽤
AnnotationApplicationContext(有@Configuration 注解的类.class)。
/**
* @Description: Spring 的配置类,相当于 l ⽂件
*/
@Configuration
public class SpringConfiguration { }
@ComponentScan 注解
⽤于指定 spring 在初始化容器时要扫描的包。作⽤和在 spring 的 xml 配置⽂件中的:
<context:component-scan base-package="pers.stringbug"/>是⼀样的
@ComponentScan 注解的属性:
1. basePackages:⽤于指定要扫描的包。
2. value:⽤于指定要扫描的包。功能和 basePackages 属性功能⼀样。
@Configuration
@ComponentScan(basePackages="pers.stringbug")
public class SpringConfiguration { }
@Bean 注解
该注解只能写在⽅法上,表明使⽤此⽅法创建⼀个对象,并且放⼊ spring 容器。
属性:
name:给当前@Bean注解⽅法创建的对象指定⼀个名称 (即 bean 的 id)。
@Configuration
@ComponentScan(basePackages="pers.stringbug")
public class SpringConfiguration {
/** 创建 QueryRunner 对象,并存⼊ Spring 容器中 */
@Bean(name="runner")
public QueryRunner createQueryRunner(DataSource dataSource) {
return new QueryRunner(dataSource);
}
/** 创建数据源对象,并存⼊ spring 容器中 */
@Bean(name="dataSource")
public DataSource createDataSource() throws PropertyVetoException {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass("sql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/Study");
dataSource.setUser("root");
dataSource.setPassword("123456");
return dataSource;
}
}
@PropertySource 注解
⽤于加载 .properties ⽂件中的配置。例如我们配置数据源时,可以把连接数据库的信息写到properties 配置⽂件中,就可以使
⽤此注解指定 properties 配置⽂件的位置。
属性:
value[]:⽤于指定 properties ⽂件位置。如果是在类路径下,需要写上 classpath:
@PropertySource(value={"classpath:jdbc.properties"})
public class JdbcConfig {
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean(name="dataSource")
public DataSource createDataSource() throws PropertyVetoException {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass(driver);
dataSource.setJdbcUrl(url);
dataSource.setUser(username);
dataSource.setPassword(password);
return dataSource;
}
}
@Import 注解
此时我们已经有了两个配置类(SpringConfiguration、JdbcConfig),但是他们还没有关系。下⾯我们可以使⽤@Import注解,为这两个配置类建⽴关系链接。
⽤于导⼊其他配置类,在引⼊其他配置类时,可以不⽤再写@Configuration 注解。当然,写上也没问题。
属性:
value[]:⽤于指定其他配置类的字节码。
@Configuration
@ComponentScan(basePackages="pers.stringbug")
@PropertySource(value={"classpath:jdbc.properties"})
@Import(value={JdbcConfig.class})
public class SpringConfiguration {
/**
* 创建 QueryRunner 对象,并存⼊ Spring 容器中
* 其中 @Qualifier(value="dataSource") 指定 bean 参数 id
*/
@Bean(name="runner")
public QueryRunner createQueryRunner(@Qualifier(value="dataSource") DataSource dataSource) {
return new QueryRunner(dataSource);
}
}
该例⼦类似于@Bean 注解中的SpringConfiguration.java
参考⽂献
1. ⽆
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论