Spring 常用注解篇

Spring 注解篇

文章目录

  • 一、注解
    • 1.用于创建对象的注解
    • 2.用于注入数据的注解
    • 3.用于改变作用范围的注解
    • 4.和生命周期相关的注解
    • 5.在配置类中利用java方法创建bean
    • 6.从properties配置文件中获取配置
  • 总结



一、注解

1.用于创建对象的注解

定义:是指由一个工厂对象决定创建出哪一种产品类

提示:这些注解的作用和在xml中配置标签的作用一样。

● @Component
作用: 用于将当前类对象存入Spring容器中
属性:value属性用于指定存入spring容器中的bean的id,不配置时默认为:当前类的类名首字母转小写

● @Controller
一般用在表现层。
作用、属性同@Component完全一样。

● @Service
一般用在业务层。
作用、属性同@Component完全一样。

● @Repository
一般用在持久层。
作用、属性同@Component完全一样。

提示:@Controller、@Service、@Repository三个注解的作用、属性同@Component完全一样

2.用于注入数据的注解

这些注解的作用和xml配置的标签下的标签的作用是一样的。
@Autowired、@Qualifier、@Resource三个注解只能注入bean类型的数据,不能注入基本数据类型和String类型。

● @Autowired
作用:
自动按照类型注入,只要容器中有唯一的一个bean对象类型和要注入的变量类型匹配,就可以注入成功。
如果IoC容器中没有任何bean的类型和要注入的变量的类型匹配,则报错。
如果IoC容器中该类型的bean存在多个,则将要注入的变量的变量名作为bean的id进行二次匹配:
如果根据变量名可以找到唯一的bean,则进行注入。
如果根据变量名匹配不到,则报错。
出现位置:可以使变量上,也可以是方法上。
细节:在使用注解进行注入时,变量的setter方法就不是必须的了。

● @Qualifier
作用:
在按照类型匹配的基础上,再按照名称匹配注入。
它在给类的成员变量注入时,不能单独使用,要和@Autowired配合使用。当按照类型注入冲突时配合@AutoWired
它在给方法参数进行注入时,可以单独使用。
属性:
value:用于指定要注入的bean的id。

● @Resource
作用:直接按照bean的id进行注入。它可以独立使用。
属性:
name:用于指定bean的id。

● @Value
作用:用于注入基本类型和String类型的变量
属性:
value:用于指定数据的值。可以配置:字面量、${key}(从环境变量、配置文件中获取值)、使用Spring中的SpEL(Spring中的EL表达式:#{表达式})。

3.用于改变作用范围的注解

提示:这些注解的作用和xml配置的标签的scope属性的作用一样。

●@Scope
作用:用于指定bean的作用范围。
属性:
value:指定范围的取值。常用取值:singleton、prototype。(不配置时默认为singleton)

4.和生命周期相关的注解

提示:这些注解的作用和xml配置的标签的init-method、destroy-method属性作用相同。

● @PreDestroy
作用:用于指定销毁方法。

● @PostConstruct
作用:用于指定初始化方法。

@Service("accountService")
@Scope("prototype")
public class AccountServiceImpl implements IAccountService {

    @Value("${server.port}")
    private String port;
    
    @Resource(name = "accountDao")
    private IAccountDao accountDao;
    
    @Autowired
	  @Qualifier("hAccountDao")
    private HAccountDao hAccountDao;

    public void saveAccount() {
        accountDao.saveAccount();
    }

    @PostConstruct
    public void init() {
        System.out.println("初始化方法");
    }

    @PreDestroy
    public void destroy() {
        System.out.println("销毁方法");
    }
}

5.在配置类中利用java方法创建bean

提示:当我们需要在程序中使用commons-dbutils去操作数据库时,需要创建DataSource、QueryRunner对象存入Spring的容器。创建对象、存入容器的过程可以放在一个配置类中,将创建对象的方法返回值作为bean存入容器。

设置配置类的不同方式:

  1. 在AnnotationConfigApplicationContext构造方法中传参:
  2. 使用@Configuration注解声明配置类:(需要在主配置类中使用@ComponentScan注解扫描到该配置类所在的包)
  3. 使用@Import注解导入其他配置

● @Configuration
作用:指定当前类为一个配置类
细节:当该类作为AnnotationConfigApplicationContext对象创建的参数时,该注解可以不写。

● @ComponentScan
作用:指定Spring在创建容器时要扫描的包。作用和xml中配置的context:component-scan一样。
属性:value/basePackages:两个属性的作用一样,都是指定创建容器时要扫描的包。属性的值为数组。

● @Bean
作用:将方法的返回值作为一个bean对象,存入Spring的IoC容器中。
属性:value/name:两个属性的作用一样,用于指定bean的id。不配置该属性时,默认以方法名作为id。
细节:当我们给方法配置@Bean注解时,如果方法有参数,Spring会去容器中查找有无可用的bean对象。查找的方式和@Autowired相同。

● @Import
作用:用于导入其他的配置类。
属性:value:用于指定要导入的其他配置类的字节码文件。当使用@Import的注解之后,有@Import注解的就是主配置类,而导入的都是子配置类。

@Configuration
public class JdbcConfiguration {
  // ....
}
@Configuration
@ComponentScan("com.study")
@Import(JdbcConfiguration .class)
public class SpringConfiguration {

    @Bean("runner")
    @Scope("prototype")  // Spring容器的bean默认为单例,为避免不同数据库操作之间的干扰,此处应该使用Scope将runner指定为多例
    public QueryRunner createQueryRunner(DataSource dataSource) {
        return new QueryRunner(dataSource);
    }

    @Bean("dataSource")
    public DataSource createDataSource() {
        try {
            ComboPooledDataSource dataSource = new ComboPooledDataSource();
            dataSource.setDriverClass("oracle.jdbc.driver.OracleDriver");
            dataSource.setJdbcUrl("jdbc:oracle:thin:@127.0.0.1:1521/orcl");
            dataSource.setUser("springtest");
            dataSource.setPassword("tiger");
            return dataSource;
        } catch (PropertyVetoException e) {
            throw new RuntimeException(e);
        }
    }
}
	@Test
    public void testFindAll(){
        // 读取配置类中的配置(如果有多个配置类,也可以传入多个配置类)
        ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfiguration.class);
        IAccountService as = ac.getBean("accountService", IAccountService.class);
        as.findAllAccount().forEach(System.out::println);
    }

6.从properties配置文件中获取配置

提示:将jdbc的相关信息配置在properties配置文件中。

编写jdbcConfig.properties配置文件:

jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521/orcl
jdbc.username=springtest
jdbc.password=tiger

在JdbcConfig.java中获取properties中配置的信息

@Configuration
@ComponentScan({"com.study","com.config"})
@PropertySource("classpath:jdbcConfig.properties")
public class SpringConfiguration {

}

在JdbcConfig.java中获取properties文件中的配置信息

@Configuration
public class JdbcConfig {

    @Value("${jdbc.driver}")
    private String jdbcDriver;
    @Value("${jdbc.url}")
    private String jdbcUrl;
    @Value("${jdbc.username}")
    private String jdbcUser;
    @Value("${jdbc.password}")
    private String jdbcPassword;
    
    @Bean("dataSource")
    public DataSource createDataSource() {
        try {
            ComboPooledDataSource dataSource = new ComboPooledDataSource();
            dataSource.setDriverClass(jdbcDriver);
            dataSource.setJdbcUrl(jdbcUrl);
            dataSource.setUser(jdbcUser);
            dataSource.setPassword(jdbcPassword);
            return dataSource;
        } catch (PropertyVetoException e) {
            throw new RuntimeException(e);
        }
    }
}

总结

你可能感兴趣的:(Spring全家桶,spring,java,mybatis)