(1).用于注册bean对象的注解

1.1@Component:

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

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

1.2@Controller

作用: 调用无参构造创建一个bean对象,并把对象存入spring的Ioc容器,交由spring容器进行管理。相当于在xml中配置一个bean。一般用于表现层的注解

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

1.3@Service

作用: 调用无参构造创建一个bean对象,并把对象存入spring的Ioc容器,交由spring容器进行管理。相当于在xml中配置一个bean。一般用于业务层的注解

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

1.4@Repository

作用: 调用无参构造创建一个bean对象,并把对象存入spring的Ioc容器,交由spring容器进行管理。相当于在xml中配置一个bean。一般用于持久层的注解

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

1.5@Bean

作用:

用于把当前方法的返回值作为bean对象存入spring的ioc容器中 属性:name:用于指定bean的id。当不写时,默认值是当前方法的名称。注意:当我们使用注解配置方法时,如果方法有参数,spring框架会去容器中查找有没有可用的bean对象,查找的方式和Autowired注解的作用是一样的。

例: 获取Datasource对象 @Return @Bean(value = "dataSource") public DataSource getDataSource(){

try{

ComboPooledDataSource dataSource = new ComboPooledDataSource();

dataSource.setDriverClass(this.driver);

dataSource.setJdbcUrl(this.url);

dataSource.setUser(this.username);

dataSource.setPwd(this.pwd);

return dataSource; }catch(Exception exception) {

throw new RuntimeException(exception);

}

}

(2).用于依赖注入的注解

2.1@Autowired

作用:

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

属性:

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

例: @Autowired @Qualifier("userService")

private UserService userService;

2.2@Qualifier

作用:

在自动按照类型注入的基础之上,再按照 Bean 的 id 注入。它在给字段注入时不能独立使用,必须和@Autowire一起使用;但是给方法参数注入时,可以独立使用。 在自动按照类型注入的基础之上,再按照Bean的id注入.它在给字段注入时不能独立使用,必须和@Autoire一起使用;但是给方法参数注入时,可以独立使用。

属性:

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;

(3)用于改变bean作用范围的注解

3.1@Scope

作用:

指定bean的作用范围

属性:

value:

1)singleton:单例

2)prototype:多例

3)request:

4)session:

5)globalsession:

例:@Autowire

@Scope(value="prototype")

private UserService userService;

(4)生命周期相关的注解

@PostConstruct

作用:

指定初始化方法

例:

@PostConstruct

public void init() {

System.out.println("初始化方法执行");

}

4.2 @PreDestroy

作用:

指定销毁方法

例:

@PreDestroy

public void destroy() {

System.out.println("销毁方法执行");

}

-----dao
@Repository --写在dao层
-----service
@Service --写在service层
-----controller
@Controller --写在controller层
@Scope --写在多人访问controller上 单例
@scope("prototype") 多例
-----属性注入
@Autowired --写在需要注入的属性上
@Resource(name="loginService")与Autowired类似,但是需要通过指定名字去寻找找对应名字的注入对象
@Inject 与Autowired和Resource
-----资源处理
@RequestMapping对应访问的资源,可以只写在controller方法上
也可以写在controller上,controller上的也可以省略

作者:旧歌
链接:https://www.cnblogs.com/wdyjt/p/14101952.html
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利

最新文章

  1. 恶心的content
  2. Normalize.css – 现代 Web 开发必备的 CSS resets
  3. 初识IStructuralEquatable接口
  4. Bestcoder Round# 80
  5. hdu 1025 dp 最长上升子序列
  6. 宏ut_2pow_remainder
  7. 真实故事:网站遭遇DOS攻击
  8. 【bfs】 poj 3984 maze 队列存储
  9. Oracle学习笔记之游标详解
  10. HDU2289-Cup-二分
  11. 使用asp.net mvc + entityframework + sqlServer 搭建一个简单的code first项目
  12. linux清理缓存的命令
  13. Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields(翻译)
  14. PDF如何设置书签,怎么在PDF上添加书签
  15. 文件系统(File System)
  16. [HNOI2013]比赛 (用Hash实现记忆化搜索)
  17. JAVA使用qrcode生成二维码(带logo/不带logo)
  18. Bank Robbery LightOJ - 1163(推方程 注意计算机的计算方式)
  19. Android开发之获取系统所有进程信息。
  20. WCF可靠性会话之服务分流

热门文章

  1. Natapp内网穿透服务工具
  2. Python相比其他计算机语言真的更有优势吗?
  3. SimpleChannelInboundHandler生命周期
  4. 在EXCEL带有字母的数字下拉如何能自动排序
  5. mfc c++优化
  6. WEB组态可视化软件(B/S)
  7. JZOJ8月15日提高组反思——2020年暑假终结篇
  8. Spring Boot + Redis 初体验
  9. charles功能(三)弱网测试(模拟超慢网速,会导致接口数据返回超时的那种慢)
  10. Scrapy简明教程