spring_基础学习_02_有关ioc注解

常用IOC注解的分类

用于创建对象的 : 作用和XML配置文件中编写标签实现的功能一致

  • @Component

    作用 : 将当前对象存入soring容器中
    属性 :
    value : 指定标签的id , 不设置则默认是本类类名,首字母小写.

  • @Controller : 一般使用在表现层

  • @Service : 一般使用在业务层

  • @Repository : 一般是用在持久层

    以上三个注解他们的作用和属性与Component一致,
    这是spring框架为我们提供的三层使用的注解,使我们的三层对象更加清晰.
    用于注入数据的 : 与标签中的标签的作用一致

  • @Autowired

    作用 : 自动按照类型注入.
    1) 在ioc容器中找到唯一一个匹配的类型,直接注入
    2) 在ioc容器中没有找到匹配的类型,报错
    3) 在ioc容器中找到了多个匹配的类型,则匹配变量名称和bean对象id,匹配不上则报错.匹配到则注入
    出现位置 ; 可以是变量上,也可以是方法上
    细节 : 在使用注解注入时,无需set方法.

  • @Qualifier

    作用 : 在按照类中注入的基础之上再按照指定id注入
    属性:
    value : 用于指定注入bean的id.

  • @Resource

    作用 : 直接按照bean对象的id注入.
    属性 :
    name : 指定注入的bean对象id

  • @Value

    作用 : 用于注入String和基础数据类型.

用于改变作用范围的 : 与标签中的scope属性实现的功能一致

  • @Scope

    作用 : 在类上添加的,控制类生成的时候采用单例还是多例。
    属性:
    singleton :单例
    prototype :多例
    request :request域,需要在web环境
    session :session域,需要在web环境
    application: context域,需要在web环境
    globalsession 集群环境的session域,需要在web环境

生命周期相关 : 与标签中的init-method和destroy-method属性实现的功能一致

  • @PostConstructor

    作用 : 与标签中的init-method属性一致.

  • @PreDestroy

    作用 : 与标签中的destroy-method属性一致

编写一个配置类时注解的使用

  • @Configuration
    作用: 指定当前类是一个配置类
    细节: 当配置类作为AnnonationConfigApplicationContext的参数时,可以不写该注解.

  • @ComponentScan
    作用: 用于通过注释指定spring在创建容器时要扫描的包
    属性:
    value: 用于指定创建容器时要扫描的包.
    basePackage: 和value一样

  • @Bean
    作用: 用于当前方法的返回值作为bean对象存入spring的ioc容器中
    属性:
    name: 用于指定bean对象的id. 默认值是当前方法的名称.
    细节: 当我们使用注释配置方法时,如果方法有参数,会去ioc容器中去寻找有没有类型相同的对象
    –没有, 报错
    –有多个, 匹配参数名称和bean对象ID

  • @import
    作用: 用于导入其它的配置类
    属性:
    value: 用于指定其她配置类的字节码

  • @Qualifier
    作用: 注入方法的参数时指定的参数bean对象id

  • @import
    作用:用于导入另外的配置类的字节码

例子如下:

@Configuration
@ComponentScan("lorihen")
@Import(JdbcConfig.class)
public class SpringConfiguration {
    /**
     * 用于创建一个QueryRunner对象
     *
     * @param dataSource
     * @return
     */
    @Bean(name = "runner")
    @Scope(value = "prototype")
    public QueryRunner createQueryRunner(@Qualifier("dataSource")DataSource dataSource) {
        return new QueryRunner(dataSource);
    }

    @Bean(value = "dataSource")
    public DataSource createDataSource() {
        try {
            ComboPooledDataSource ds = new ComboPooledDataSource();
            ds.setDriverClass("com.mysql.jdbc.Driver");
            ds.setJdbcUrl("jdbc:mysql://localhost:3306/mybatis");
            ds.setUser("root");
            ds.setPassword("123");
            return ds;
        } catch (PropertyVetoException e) {
            e.printStackTrace();
        }
        return null;
    }
}

猜你喜欢

转载自blog.csdn.net/terstdfhuc/article/details/83660452
今日推荐