Spring原始注解以及新注解使用(详细)

Spring Base Annottion: 基础注解

Component	表示该组件用于Spring生成一个bean	->Component:组件
		@Component("user")

Controller	表示该控制器用于Spring生成一个bean
		@Controller("user")

Service		表示该业务逻辑类用于Spring生成一个bean
		@Service("user")

Repository	表示该Dao类用于Spring生成一个bean ->repository:贮藏室 数据封装基地
		@Resipotory("user")

Autowired	表示自动封装该属性,或者字段(可以省略set方法,根据字段Field即可,如果该字段是一个Bean,将通过Spring容器中查找该类型的Bean对象,用于封装该注解字段),
		@Autowired 根据该注解指定的字段,查询Spring容器中对应的bean对象,分配给当前类作为成员.
		Autowired默认是根据类型依赖注入.ByType,如果Autowired注解的是一个字段,并不能完整的体现面向对象的思想,最好是注解在set方法上.

Qualifier	表示根据提供的修饰语 @Qualifier('xxx') -> 匹配该xxx属性,若要使用该注解,必须配合AutoWire一起使用,而Autowire可以单独使用
		@Autowire @Qualifier("user") 封装user注解的bean为本类对象的成员,根据名称注入 ByName,设置在字段上. @Qualifier常常使用在参数的赋值上
		如: String getUsername(@Qualifier("user")User user){}

Resource	是Aotuwire注解和Qualifier注解的结合体.@Resource("user"),标注为user的bean
		@Resource("user") 封装user注解的bean为奔雷对象的成员 == @Autowire @Qualifier
		默认根据名称依赖注入,默认Resource() = Resource like Resource(name = "XXX")  	->体现面向对象思想应该设置在字段上
		可以手动设置为根据类型注入Resource(type = User.class) 				->体现面向对象思想应该设置在set方法上

Value		@Value("xxx");为修饰的字段赋值;通常配合SpEL(Spring Expression Language)使用
		@Value("${jdbc.url}") private String url; 为url赋值	 -> (Spring中引入的properties后缀文件中的jdbc.url对应的值) 
									->或者{PropertySrouce注解中的jdbc.url值}
	
Scope		常用 : 	@Scope("singleton") 声明从spring容器获得的该类的bean有且只有一个(单例模式)
			@Scope("prototype") 声明从spring容器获得的该类的bean有多个(标准Bean模式)

PostConstruct	注解使用在用户定义的初始化方法前,声明该方法是该类的初始化方法@PostConstruct :意为执行在构造方法后,构造方法创建对象,对象调用该初始化方法

PreDestroy	注解使用在用户自定义的结束方法前,声明该方法是该类的结束方法,当前对象被销毁前调用该方法@PreDestroy ;Spring容器被销毁的时候,执行.

Order		注入对象引用的集合的时候使用:@Order(1) @Order(2) 表示该类生成的bean将会存储在某个List<该类型>中,并按照顺序插入List
		如果是Map<String,T> 那么order的顺序没有任何关系,但是该Map必须定义为<String,T> String接收对应对象的id值(id唯一 -> key唯一);
		此处的List和Map可以通过@Autowired或@Resource注入;
		for example -> UserDao -> UserDaoImpl1(@Repository("userDao1")  @Order(2)) 	and 	UserDaoImpl2(@Repository("userDao2")  @Order(1))
		(@Resource)private List<UserDao> list; 	->	list.get(0) ->userDao2 		 list.get(1) -> userDao1
		(@Autowired)private Map<String,UserDao> map;  ->	map{第一个("userDao1" = userDao1), 第二(个"userDao2" = userDao2)}

Spring All Annototion: 新注解

Configuration	声明该文件是Spring核心/配置文件->.可以定义多个配置类,初学者往往认为只能定义一个@Configuration声明的类,其余的分配置文件不能使用@Configuration注				解,其实不然;后期会逐渐学习到.
		@Configuration

ComponentScan	声明该配置文件的组件扫描范围(包)
		@ComponentScan("com.itheima")

PropertySource	定义properties配置文件,读取文件信息 ->声明该类将会引入该properties文件
		@Properties("classpath:jdbc.properties") 该类引入jdbc.properties文件

Import		引入其他的配置文件或者配置类
		@Import(JdbcContextConfiguration.class) 引入该JdbcContextConfiguration类(分配置类)
		@Import(xxx),需要引入多个时候,使用多个@Import注解

Bean		非用户自定义的Bean,用于方法上,标注该方法的返回值将会存储到Spring容器中
		@Bean("id"),暂时可以设想成另类的@Component注解.

注意点:
Component:组件 ByID
ComponentScan:组件扫描 ByPackage ComponentScan:在使用全注解的时候,非常重要.如果未配置,那么Spring的IoC容器默认不会扫描任何包,就不会有任何Bean.
Repository:贮藏室 ByID
Qualifier:修饰语 ByName

Autowired & Qualifier 与 Resource的区别 请注意 一般:我们使用了注解完成了依赖注入,那么就不需要在创建set方法了,经过测试是按照字段进行注入,注入问题 其实是很有意思的,望看到这篇博客的读者可以自行测试一下;

相同点:都可以注解字段和注解方法
不同点:注解在字段上的时候, 如果Autowired结合Qualifier使用,那么Qualifier必须使用Qualifier(“userDao”),
如果单独使用Autowired,那么将会根据注解的字段的参数名找到标配有该ID为该参数名的被注解类或者xml中设定的Bean

使用Resource的时候如果不添加属性name=“id” 或者添加属性为type=UserDao.class 等同于单独使用Autowired type属性除非耦合使用type = UserDaoImpl1.class 或者Impl2.class

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值