Spring中的注解是个好东西,可以简化我们的操作,但是使用了注解又会在一定的程度上增加程序的耦合度,xml中的配置写在了类中
虽然简化了开发过程,但是或多或少的违背了开闭原则。所以在开发过程中要先明确,那些配置是要经常改动的,那些配置是不会经常改动的。

ioc中的annotation配置

@Autowired(自动注入byType→byName)
1) @Autowired使用后需要在xml文件加入以下配置才能生效: <context:annotation-config/>

2) @Autowired注解可以写在成员变量、setter方法、构造器函数上面

3) @Autowired默认按照byType匹配的方式进行注入,如果没有一个bean的类型是匹配的则会抛异常,如果有多个bean的类型都匹配成功了,那么再按byName方式进行选择

4) @Autowired如果最终匹配不成功(注意一定是一个都没有找到的情况)则会抛出异常,但是如果设置为 @Autowired(required=false),则最终匹配不成功没有不会抛出异常。

5) @Autowired可以结合@Qualifier("beanName")来使用,则可以达到byName的效果

@Resource(自动注入byName→byType)
1) @Resource使用后需要在xml文件加入以下配置才能生效:<context:annotation-config/>

2) @Resource的作用和@Autowired差不多,只不过 @Resource是默认先用byName,如果找不到合适的就再用byType来注入

3) @Resource有俩个属性,name和type,使用name属性则表示要byName匹配,使用type属性则表示要byType匹配

@PostConstruct和@PreDestroy
1) 标注了@PostConstruct注解的方法将在类实例化后调用
2) 标注了@PreDestroy注解的方法将在类销毁之前调用

@Component
1) @Component注解可以直接定义bean,而无需在xml定义。但是若两种定义同时存在,xml中的定义会覆盖类中注解的Bean定义

2) @Component注解直接写在类上面即可

3) @Component有一个可选的参数,用于指定bean的名称
@Component("boss")
public class Boss{}

4) @Component如果不指定参数,则bean的名称为当前类的类名小写
//和上面例子的相关相同
@Component
public class Boss{}

5) @Component使用之后需要在xml文件配置一个标签
<context:component-scan/>

6) <context:component-scan base-package="com.briup.ioc.annotation" />
表示spring检查指定包下的java类,看它们是否使用了 @Component注解

7) @Component定义的bean默认情况下都是单例模式的,如果要让这个bean变为非单例,可以再结合这个@Scope注解来达到目标@Scope("prototype")

@Component是Spring中所有bean组件的通用形式, @Repository @Service @Controller 则是 @Component的细化
用来表示更具体的用例,分别对应了持久化层、服务层和表现层。
但是至少到现在为止这个四种注解的实质区别很小(甚至几乎没有),都是把当前类注册为spring容器中的一个bean

注意:
1.component-scan标签默认情况下自动扫描指定路径下的包(含所有子包)

2.component-scan标签将带有@Component @Repository @Service @Controller注解的类自动注册到spring容器中

3.component-scan标签对标记了
@Required @Autowired @PostConstruct @PreDestroy @Resource @WebServiceRef @EJB
@PersistenceContext @PersistenceUnit
等注解的类进行对应的操作,将这些类都作为Component进行注册

4.component-scan标签包含了annotation-config标签的作用

5.使用注解后注意:生成的对象中的基本类型的属性没有初始化值

SpringIOC中的注解配置的更多相关文章

  1. SpringAOP中的注解配置

    使用注解实现SpringAOP的功能: 例子: //表示这是被注入Spring容器中的 @Component //表示这是个切面类 @Aspect public class AnnotationHan ...

  2. 转载 Servlet3.0中使用注解配置Servle

    转载地址:http://www.108js.com/article/article10/a0021.html?id=1496 开发Servlet3的程序需要一定的环境支持.Servlet3是Java ...

  3. Spring中的注解配置-注入bean

    在使用Spring框架中@Autowired标签时默认情况下使用 @Autowired 注释进行自动注入时,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个.当找不到一个匹配的 Bean ...

  4. spring注解配置实例

    在spring中使用注解配置前需要先在配置文件指定需要扫描的包. 通过注解的方式依赖注入,可以不用创建set方法,也不用在xml文件中申明注入关系. 实例结构如下: 整个流程是: 先创建好数据库的表对 ...

  5. struts2的注解配置全面解析

    以前在用struts2的注解配置时总是要在web.xml中配置一个初始化参数(actionPackages),最近发现不灵了,仔细研究了下发现即使不用在web.xml中配置也能成功,但时灵时不灵的,很 ...

  6. 注解配置springMvc及向作用域中赋值

    1.在applicationContext.xml中配置包扫描器 <!-- 使用注解配置扫描器 --> <context:component-scan base-package=&q ...

  7. spring注解开发中常用注解以及简单配置

    一.spring注解开发中常用注解以及简单配置 1.为什么要用注解开发:spring的核心是Ioc容器和Aop,对于传统的Ioc编程来说我们需要在spring的配置文件中邪大量的bean来向sprin ...

  8. hibernate中多对多的注解配置

    hibernate多对多的注解配置中的自动生成中间表的配置: @Entity@Table(name="test_student")public class Students { @ ...

  9. hibernate中1对1的注解配置

    hibernate中1对1的注解配置分为:外键关联映射和主键关联映射 1.外键配置 //一方@Entity@Table(name="test_classinfo")public c ...

随机推荐

  1. 1242 斐波那契数列的第N项

    1242 斐波那契数列的第N项  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题   斐波那契数列的定义如下:   F(0) = 0 F(1) = 1 F(n) = F( ...

  2. P1537 弹珠

    P1537 弹珠 题目描述 玛莎和比尔各自有自己的弹珠收藏.他们想重新分配收藏品,使两人能平等拥有弹珠.如果所有的弹珠的价值相同,那么他们就可以平分.但不幸的是,有一些弹珠更大,或者更美丽,所以,玛莎 ...

  3. error LNK2001: 无法解析的外部符号 __imp__RegEnumKeyExA@32

    错误: error LNK2001: 无法解析的外部符号 __imp__OpenProcessToken@12 error LNK2001: 无法解析的外部符号 __imp__LookupPrivil ...

  4. python 调用redis

    #!/usr/bin/env python #_*_ coding:UTF-8 _*_ import redis import pickle #普通连接 ''' db="db1" ...

  5. PHP面试 PHP基础知识 二(常量及数据类型)

    常量及数据类型 PHP八种数据类型 四种标量类型 字符串(string).布尔(boolean).浮点(float/double).整型(integer) 两种复合类型 数组(array).对象(ob ...

  6. 调用API接口,查询手机号码归属地(3)

    从mysql数据库获取电话号码,查询归属地并插入到数据库 #!/usr/bin/python # -*- coding: utf-8 -*- import json, urllib, sys, pym ...

  7. Selenium3 + Python3自动化测试系列七——多窗口切换

    多窗口切换 在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要主机切换到新打开的窗口上进行操作. WebDriver提供了switch_to.window()方法,可以实现在不同的窗口之间切 ...

  8. plsql连接问题

    PLsql好久没用了,今天想用的时候,发现自己忘记本地实例(system)的密码了,试了几个自己常用的密码都不对,提示“ORA-01017:invalid username/password;logo ...

  9. 微信小程序のwxs

    WXS(WeiXin Script)是小程序的一套脚本语言,结合 WXML,可以构建出页面的结构. wxs可以说就是为了满足能在页面中使用js存在的,在wxml页面中,只能在插值{{ }}中写简单的j ...

  10. python异常整理

    一.操作excel 时异常 1.PermissionError: [Errno 13] Permission denied (1)原因:权限错误:[Errno 13] 权限被拒绝 错误产生的原因是文件 ...