1、用于注册bean对象注解

1.1 @Component

作用:

调用无参构造创建一个bean对象,并把对象存入Spring的IoC容器,交由Spring容器进行管理。相当于在xml中配置一个Bean。

属性:

value:指定Bean的id。如果不指定value属性,默认Bean的id是当前类的类名,首字母小写。

子注解:
以下三个注解是从@Component派生出来的,它们的作用与@Component是一样的,Spring增加这三个注解是为了在语义行区分MVC三层架构对象。

@Component:用于注册非表现层、业务层、持久层的对
@Controller:用于注册表现层对象  
@Service:用于注册业务层对象  
@Reposity:用于注册持久层对象

1.2 @Bean

作用:

用于把当前方法的返回值(对象)作为Bean对象存入Spring的IoC容器中(注册Bean)

属性:

name/value:用于指定Bean的id。当不写时,默认值是当前方法的名称。注意:当我们使用注解配置方法时,如果方法有参数,Spring框架会去容器中查找有没有可用的Bean对象,查找的方式和Autowired注解的方式是一样的。

案例:

@Configuration
public class JdbcConfig {
    /**
     * 用于创建QueryRunner对象
     * @param dataSource
     * @return
     */
    @Bean(value = "queryRunner")
    public QueryRunner createQueryRunner(DataSource dataSource) {
        return new QueryRunner(dataSource);
    }

    /**
     * 创建数据源对象
     * @return
     */
    @Bean(value = "dataSource")
    public DataSource createDataSource() {
        try {
            ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
            comboPooledDataSource.setDriverClass("com.mysql.jdbc.Driver");
            comboPooledDataSource.setJdbcUrl("jdbc:mysql://localhost:3306/mydatabase");
            comboPooledDataSource.setUser("root");
            comboPooledDataSource.setPassword("root");
            return comboPooledDataSource;
        }catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

2、用于依赖注入的注解

2.1 @Autowired

作用:

@Autowire和@Resource都是Spring支持的注解形式动态装配Bean的方式。Autowire默认按照类型(byType)装配,如果想要按照名称(byName)装配,需结合@Qualifier注解使用。

属性:

required:@Autowire注解默认情况下要求依赖对象必须存在。如果不存在,则在注入的时候会抛出异常。如果允许依赖对象为null,需设置required属性为false。

案例:

@Autowired /* Autowire默认按照类型(byType)装配 */
// @Autowired(required = false) /* @Autowire注解默认情况下要求依赖对象必须存在。如果不存在,则在注入的时候会抛出异常。如果允许依赖对象为null,需设置required属性为false。 */
// @Qualifier("userService") /* 按照名称(byName)装配 */
private UserService userService;

2.2 @Qualifier

作用:

@Autowired是按照名称(byName)装配,使用了@Qualifier注解之后就变成了按照名称(byName)装配。它在给字段注入时不能独立使用,必须和@Autowire一起使用;但是给方法参数注入时,可以独立使用。

属性:

value:用于指定要注入的bean的id,其中,该属性可以省略不写。

案例:

@Autowire
@Qualifier(value="userService") 
//@Qualifier("userService")     //value属性可以省略不写
private UserService userService;

2.3 @Resource

作用:

@Autowire和@Resource都是Spring支持的注解形式动态装配bean的方式。@Resource默认按照名称(byName)装配,名称可以通过name属性指定。如果没有指定name,则注解在字段上时,默认取(name=字段名称)装配。如果注解在setter方法上时,默认取(name=属性名称)装配。

属性:

name:用于指定要注入的bean的id
type:用于指定要注入的bean的type

装配顺序

1.如果同时指定name和type属性,则找到唯一匹配的bean装配,未找到则抛异常;
2.如果指定name属性,则按照名称(byName)装配,未找到则抛异常;
3.如果指定type属性,则按照类型(byType)装配,未找到或者找到多个则抛异常;
4.既未指定name属性,又未指定type属性,则按照名称(byName)装配;如果未找到,则按照类型(byType)装配。

案例:

@Resource(name="userService")
//@Resource(type="userService")
//@Resource(name="userService", type="UserService")
private UserService userService;

2.4 @Value

作用:

通过@Value可以将外部的值动态注入到Bean中,可以为基本类型数据和String类型数据的变量注入数据

案例:

// 1.基本类型数据和String类型数据的变量注入数据
@Value("tom") 
private String name;
@Value("18") 
private Integer age;


// 2.从properties配置文件中获取数据并设置到成员变量中
// 2.1jdbcConfig.properties配置文件定义如下
jdbc.driver \= com.mysql.jdbc.Driver  
jdbc.url \= jdbc:mysql://localhost:3306/eesy  
jdbc.username \= root  
jdbc.password \= root

// 2.2获取数据如下
@Value("${jdbc.driver}")  
private String driver;

@Value("${jdbc.url}")  
private String url;  
  
@Value("${jdbc.username}")  
private String username;  
  
@Value("${jdbc.password}")  
private String password;

4、生命周期相关的注解

4.1 @PostConstruct

作用:

指定初始化方法

案例:

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

4.2 @PreDestroy

作用:

指定销毁方法

案例:

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

短腿臭柯基
9 声望2 粉丝