spring在IOC中常用的注解
用于创建对象
和在xml文件中的<bean></bean>标签实现的功能是一样的
@Component: 用于把当前对象存入spring容器当中
@Controller 一般在控制层
@Service 一般在业务层
@Repository 一般在持久层
以上三个注解和Component作用都一样
他们三个是spring提供的明确的三层注解
属性: value 用于指定id的值 当不写时默认值为当前类名 且首字母小写
用于注入数据
和xml文件中<bean></bean>标签中的<property></property>标签的作用是一样的
@Autowired:自动按照类型注入
我的理解:springIOC容器的结构是Map { key(String): value(Object)},
被注解的变量类型在IOC容器中匹配对象时会直接略过key,直接找bean对象,如果找到了就匹配成功。
如果找不到的话,就会报错(空指针异常)。
如果IOC容器中有多个类型匹配时:首先会匹配所有找到的对象,然后根据注入的变量名称与找到的匹配对象的key(也就是id)相匹配
作用:只要容器中有唯一的bean对象类型和要注入的变量类型匹配 就可以注入成功,
如果IOC容器中没有任何的bean类型和要注入的变量类型匹配就会报错
如果IOC容器中有多个类型匹配时:
出现位置:可以是变量,也可以是方法
细节:在使用注解注入时,set方法就不是必须的了
@Qualifier
作用:按照类中注入的基础上按照名称注入。他在给类的成员注入时不可以单独使用,但是方法可以单独使用
属性:value(用于指定bean的id)
@Resource
作用:直接按照bean的id注入,可以使用
属性:name(用于指定bean的id)
以上三个注入都只能注入其他bean类型,不能注入基础数据类型和String类,另外集合类型的注入只能通过xml来实现
@Value
作用:注入基本数据类型和String类
属性: 指定数据的值,它可以使用spring的spEl (el表达式)
spEl的写法也是${表达式}
改变作用范围的 scope
和在xml文件中的<bean></bean>标签中使用scope属性实现的功能是一样的
@Scope
作用:用于指定bean的作用范围
属性:value(指定范围取值) 常用的取值single prototype
和生命周期相关
和在xml文件中的<bean></bean>标签中使用init-method 和 destory-methid的作用是一样的
@PreDestroy
作用:用于指定销毁方法
@PostConstruct
作用:用于指定初始化方法