Spring的注解开发分为两种,一种是部分使用注解,仍然保留配置文件的原始注解;另一种是完全使用注解配置的新注解;
原始注解
主要是替代 自定义Bean的xml配置,和Hibernate的原始注解一样,我们还得告诉配置文件,我们使用注解配置了哪些文件
使用注解,得配置context命名空间和约束路径
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <!--配置context命名空间--> xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd <!--配置context的约束路径--> http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 配置包扫描 目的:告知spring容器 哪个包下的类使用了注解配置 base-package:基本包 Spring可以扫描该包及其后代包 --> <context:component-scan base-package="com.cuixiaoming"></context:component-scan> </beans>
下面是使用的注解
//这四个对象的使用方法完全一样,下面三个是第一个的语义化注解
@Component:实例化对象 (重点)
//用在类定义上,里面是以前bean标签中的id如 @Component("userService")
@Controller:用于实例化web层的实体 (重点)
@Service:用于实例化service层的实体 (重点)
@Repository:用于实例化dao层的实体 Repository:直译是仓库的意思 (重点)
//对象注入,配置在
@Autowired:注入对象 注意:单独使用它是按照类型注入的 (重点)
@Qualifier(id值) :使用@Autowired+@Qualifier 是按照指定的id名称进行注入
@Resource(name="id的值") 相当于@Autowired+@Qualifier
//字符串注入
@Value(字符串)
@Value("${spring容器中key}") (重点)
//
@Scope("singleton/prototype") (重点)
@PostConstruct
@PreDestroy
如果非自定义实体 不能使用上述原始注解进行实例化的配置
新注解
新注解是把xml配置文件换成了实体配置类
新注解常用的标签如下
@Configuration : 标注该实体是一个配置类
@ComponentScan : 用于扫描包 ---->@ComponentScan(basePackages = {"com.cuixiaoming"})
@Bean : 将@Bean修饰的方法的返回值 以指定的名称存储到spring容器中---->@Bean(name="dataSource")
@PropertySource : 加载properties文件 ---->@PropertySource("classpath:jdbc.properties")
@Import : 引入其他配置实体 ---->@Import({DataSourceConfiguration.class})
里面把我测试的例子贴上来
主配置实例
package com.cuixiaoming.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
//将配置xml换成一个配置的实体类
//声明这是一个配置实体类
@Configuration
//配置包扫描路径
@ComponentScan(basePackages = {"com.cuixiaoming"})
@Import({DataSourceConfiguration.class})//引入的是其他配置实体的字节码对象
public class SpringConfiguration {
}
//配置占位符配置器(在Spring4.3版本以下,都需要手动配置配置器对象,在所有配置对象中,只要其中一个配置了就可以了)
用来数据源配置的配置实例
package com.cuixiaoming.config;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import javax.sql.DataSource;
import java.beans.PropertyVetoException;
@Configuration
//将properties中数据加载进spring容器中
@PropertySource("classpath:jdbc.properties")
public class DataSourceConfiguration {
//将容器的数据封装起来
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String passworld;
//将该方法的返回值以指定的名称储存到spring容器中
@Bean(name="dataSource")
public DataSource getDataSource() throws PropertyVetoException {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass(driver);
dataSource.setJdbcUrl(url);
dataSource.setUser(username);
dataSource.setPassword(passworld);
return dataSource;
}
//配置占位符配置器(在Spring4.3版本以下,都需要手动配置配置器对象,在所有配置对象中,只要其中一个配置了就可以了)
@Bean
public static PropertySourcesPlaceholderConfigurer getPropertySourcesPlaceholderConfigurer(){
return new PropertySourcesPlaceholderConfigurer();
}
}
- 配置占位符配置器(在Spring4.3版本以下,都需要手动配置配置器对象,在所有配置对象中,只要其中一个配置了就可以了)
@Bean
public static PropertySourcesPlaceholderConfigurer getPropertySourcesPlaceholderConfigurer(){
return new PropertySourcesPlaceholderConfigurer();
}