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 中保存用户。。。");
} }

具体代码:SpringDemo1.demo1()


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

具体代码:SpringDemo1.demo2() 和 SpringDemo1.demo3()

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

具体代码:SpringDemo1().demo3()

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...");
}
}

具体代码:SpringDemo2.demo1()


5. Bean 的作用范围

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

举个例子:

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

具体代码:SpringDemo2.demo2()


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" 是开启注解扫描:可以使用类注解和属性注解。

具体代码:SpringDemo3.demo1()

Spring 的 Bean 管理(注解方式)的更多相关文章

  1. Spring之Bean管理------注解方式

    编写测试类 1,编写相关的类 public interface UserDao { public void sayHello(); } public class UserDaoImpl impleme ...

  2. IoC容器-Bean管理注解方式(创建对象)

    IoC操作Bean管理(基于注解方式) 1,什么是注解 (1)注解是代码特殊标记,格式:@注解名称(属性名称=属性值,属性名称=属性值...) (2)使用注解,注解作用在类上面,方法上面,属性上面 ( ...

  3. IoC容器-Bean管理注解方式(注入属性@Autowired和Qualifier)

    基于注解方式实现属性注入 (1)@Autowired:根据属性类型进行自动装配 第一步 把 service 和 dao 对象创建,在service 和 dao 类添加创建对象注解 第二步 在servi ...

  4. IoC容器-Bean管理注解方式(完全注解开发)

    完全注解开发 (1)创建配置类,替代xml配置文件 (2)编写测试类 在实际中一般用springboot做

  5. IoC容器-Bean管理注解方式(组件扫描配置)

    4,开启组件扫描细节配置

  6. Spring 的Bean管理的常用注解

    属性注入的注解(使用注解注入的方式,可以不用提供set方法) @Value 用于注入普通类型 @Autowired 自动装配 :默认按类型进行装配  按名称注入 @Qualifier 强制使用名称注入 ...

  7. 面试阿里,字节,美团必看的Spring的Bean管理详解

    IOC容器 工厂只负责创建对象,而Spring当然不仅仅是一个对象工厂,其核心是一个对象容器,其具备控制反转的能力,所以也称为IOC容器. 帮助我们存放对象,并且管理对象,包括:创建.销毁.装配,这样 ...

  8. Spring的bean管理(注解方式)

    注解:代码中的特殊标记,注解可以使用在类.方法.属性上面,使用注解可实现一些基本的功能.注解的写法是@注解名称(属性=属性值). 使用注解创建对象 第一步,创建Web项目,引入Spring的开发包 第 ...

  9. (转)Spring的bean管理(注解方式)

    http://blog.csdn.net/yerenyuan_pku/article/details/69663779 Spring的bean管理(注解方式) 注解:代码中的特殊标记,注解可以使用在类 ...

随机推荐

  1. pipreqs------查找python项目依赖并生成requirement

    一起开发项目的时候总是要搭建环境和部署环境的,这个时候必须得有个python第三方包的list,一般都叫做requirements.txt. 如果一个项目使用时virtualenv环境,还好办 pip ...

  2. MySql workbeach 更改侧边栏大小

    1.定位到workbench的样式目录下 cd /usr/share/mysql-workbench/ 2.更改其样式文件 GtkStatusbar GtkLabel { font-size: 12p ...

  3. docker 安装 jmeter

    1.下载jmeterwget http://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/apache-jmeter-5.1.1.tgz2. ...

  4. IIS 7 实现http跳转https 重定向方法

    官网的域名申请了一个SSL加密,导致原来的http无法访问了,网上找了一下解决方案,https://www.cnblogs.com/wer-ltm/p/10190535.html  按照这个方法进行了 ...

  5. 用curl指令访问api-server

    可以直接用curl指令访问api-server,一种是将kubeconfig中所包含的证书抠出来作为参数给curl指令使用.这种方法操作起来比较复杂.还要一种很简单的方法: 首先执行 kubectl ...

  6. Mac 常用配置(JDK切换,ll命令设置)

    打开 /Users/用户/.bash_profile文件 1.JDK切换,添加如下内容 export JAVA_6_HOME=`/usr/libexec/java_home -v 1.6` # 设置 ...

  7. 架构模式: 命令查询职责分离 (CQRS)

    架构模式: 命令查询职责分离 (CQRS) 问题 如何在微服务架构中实现查询 结论 将应用程序拆分为两部分:命令端和查询端.命令端处理创建,更新和删除请求,并在数据更改时发出事件.查询端通过对一个或多 ...

  8. 【AMAD】cookiecutter-django -- 是一个构建Django项目的脚手架工具

    动机 简介 个人评分 动机 Django内置的命令django-admin startproject其实并不好用,在你上线之前八成已经把它改的面目全非了. 简介 cookiecutter-django ...

  9. 论文阅读 | Robust Neural Machine Translation with Doubly Adversarial Inputs

    (1)用对抗性的源实例攻击翻译模型; (2)使用对抗性目标输入来保护翻译模型,提高其对对抗性源输入的鲁棒性. 生成对抗输入:基于梯度 (平均损失)  ->  AdvGen 我们的工作处理由白盒N ...

  10. 一篇文章带你了解SQL注入

    什么是SQL注入? 原理: Web应用程序对用户输入的数据校验处理不严或者根本没有校验,致使用户可以拼接执行SQL命令 危害: 注入可能导致数据丢失泄露或数据破坏.缺乏可审计性,有时甚至能导致完全接管 ...