首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring 的 Bean 管理(注解方式)

Spring 的 Bean 管理(注解方式)

作者头像
希希里之海
发布2019-06-19 19:07:00
7030
发布2019-06-19 19:07:00
举报

Spring 的 Bean 管理(注解方式)

1. 导入必要的 jar 包和 xml 文件

  • 使用注解需要导入 spring-aop 的 jar 包。
  • applicationContext.xml 文件使用下行注解:
xmlns:context="http://www.springframework.org/schema/context"

2. 使用注解定义 Bean

Spring2. 5 引入使用注解去定义 Bean。

  • @Component 描述 Spring 框架中 Bean

除了 @Component 外,Spring 提供了 3 个功能基本和 @Component 等效的注解

  • @Repository 用于对 DAO 实现类进行标注
  • @Service 用于对 Service 实现类进行标注
  • @Contoller 用于对 Controller 实现类进行标注

这三个注解是为了让标注类本身的用途清晰,Spring 在后继版本会对其增强。

举个例子:

@Repository("userDao")
public class UserDao {

    public void save() {
        System.out.println("Dao 中保存用户。。。");
    }

}


3. Spring 的属性注入 -- 注解方式

A. 使用@Autowired 进行自动注入
  • @Autowired 默认按照类型进行注入。如果存在两个相同的 Bean 类型相同,则按照名称注入
  • @Autowired 注入时可以针对成员变量或者 set 方法。如果属性提供 setter 方法,注解要加在 setter 方法上;如果属性没有提供 setter 方法,注解直接加在属性上就可以。
  • 通过 @Autowired 的 required 属性,设置一定要找到匹配的 Bean
B. 使用 @Qualifier 指定注入 Bean 的名称
  • 使用 @Qualifier 指定注入 Bean 的名称
  • 使用 @Qualifier 指定 Bean 名称后,注解 Bean 必须指定相同名称
// 必须同时使用
@Autowired
@Qualifier  //按照名称来注入

举个例子:

@Component("userService")
public class UserService {
    // 直接使用注解,不用另外写setter和getter方法
    @Value("米饭")
    private String something;

    //自动注入UserDao类
    @Autowired
    //使用名称注入
    @Qualifier("userDao")
    private UserDao userDao;

    public void eat() {
        System.out.println("eat:" + something);
    }

    public void save() {
        System.out.println("Service 中保存用户。。。");
        userDao.save();
    }

}

C. @Resource 进行属性注入
  • Spring 提供对 JSR-250中定义 @Resource 标准注解的支持
  • @Resource@Autowired 注解功能相似

简单来说:

@Resource = @Autowired + @Qualifier

举个例子:

@Component("userService")
public class UserService {

    @Resource(name = "userDao")
    private UserDao userDao;

    public void save() {
        System.out.println("Service 中保存用户。。。");
        userDao.save();
    }

}

D. 总结
  • 普通类型:@Value
  • 对象类型:
@Autowired
@Qualifier("Beanname")
或
@Resource(name = "Beanname")

4. Spring 的其他注解

Spring 初始化 bean 或销毁 bean 时,有时需要作一些处理工作,因此 spring 可以在创建和拆卸 bean 的时候调用 bean 的两个生命周期方法。

xml 的配置如下:

<bean id="foo" class="...Foo" init-method="setup" destory=method="teardown" />
  • 当 bean 被载入到容器的时候调用 setup
  • 当 bean 从容器中删除应用的时候调用 teardown(scope=singleton 默认)

转换为注解方式:

  • @PostConstruct 初始化
  • PreDestory 销毁

举个例子:

@Component("bean1")
public class Bean1 {

    @PostConstruct
    public void init() {
        System.out.println("initBean...");
    }

    public void say() {
        System.out.println("say...");
    }

    @PreDestroy
    public void destroy() {
        System.out.println("destroyBean...");
    }
}

5. Bean 的作用范围

  • 使用注解配置的 Bean 和 <bean> 配置的一样,默认作用范围都是 singleton
  • @Scope 注解用于指定 Bean 的作用范围

举个例子:

@Component("bean2")
@Scope("prototype")
public class Bean2 {
    //....
}

6. 传统 XML 配置和注解配置混合使用

XML 方式的优势

结构清晰,易于阅读

注解方式的优势

开发便捷,属性注入方便

XML 与注解的整合开发
  1. 引入 context 命名空间
xmlns:context="http://www.springframework.org/schema/context"
  1. 在配置文件中添加 context:annotation-config 标签
<context:annotation-config />

PS:

  • <context:annotation-config/> 是单独使用属性注解。
  • <context:component-scan base-package="xxx" 是开启注解扫描:可以使用类注解和属性注解。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-06-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Spring 的 Bean 管理(注解方式)
    • 1. 导入必要的 jar 包和 xml 文件
      • 2. 使用注解定义 Bean
        • 3. Spring 的属性注入 -- 注解方式
          • 4. Spring 的其他注解
            • 5. Bean 的作用范围
              • 6. 传统 XML 配置和注解配置混合使用
              相关产品与服务
              容器服务
              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档