Spring的注解开发

时间:2021-03-09 05:50:31

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();
 }