Spring Ioc 常用注解
在开发中spring ioc的配置方式有多种方式,常用的一般都是byName、byType 、以及其自动装配可以查看http://www.cnblogs.com/gubai/p/9140840.html ,其实这些方式也能满足开发的日常需求但与Annotation 配置方式相比较 其配置方式也显得比较繁琐。下边介绍下其常用注解及其用法:@Autowired
1.Autowired注解
1.Autowire注解可以修饰成员变量 配置Ioc实例如下:
- //Cat 类
- public class Cat {
- private String Catname="小猫咪";
- public String toString(){
- return "CatName:"+Catname;
- }
- //Lion 类
- public class Lion {
- private String LionName="狮子王";
- public String toString(){
- return "LionName:"+LionName;
- }
- }
- //Aniaml
- public class Animal{
- @Autowired
- private Cat cat;
- @Autowired
- private Lion lion;
//注意这里边并没有setter getter方法- public String toString (){
- return cat+ "\n"+lion;
- }
- }
- //就是简单的把Cat 类和Lion 注入到Animal 中
配置文件如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:util="http://www.springframework.org/schema/util"
- xmlns:p="http://www.springframework.org/schema/p"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
- <!--byname bytype 配置时没有这一行的-->
- <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
- <bean id="animal" class="com.myspring2.annotation.Animal"></bean>
- <bean id="cat" class="com.myspring2.annotation.Cat">
- </bean>
- <bean id="lion" class="com.myspring2.annotation.Lion">
- </bean>
- </beans>
测试:
- public class Main {
- public static void main(String[] args) {
- ApplicationContext ac= new ClassPathXmlApplicationContext("applicationContext.xml");
- Animal animal=ac.getBean(Animal.class);
- System.out.println(animal.toString());
- }
- }
答应结果:CatName:小猫咪
LionName:狮子王
解读:很显然我们得到了想要的结果,当spring容器启动时AutowiredAnnotationBeanPostProcessor会自动的扫描spring容器中所有的bean,当其发现有@Autowired注解标注是,就会将自动在代码上下文中找到和其匹配(默认是类型匹配)的Bean,注入到该类中去。不需要再Animal类中写set get 方法。
@Autowired 除了能修饰成员变量之外,还能修饰setter方法 以及带参数的构造方法 。
需要注意的是:当使用这个@Autowired是应该保证spring 容器中当且仅当只有一个合适的bean,否则会报错BeanCreationException,解决方法是@Autowreid(required=false)表示的意思是找不到合适的Bean也不会抛出异常。
2.Qualifier(指定注入Bean的名称)
当spring容器中找到1个以上的bean是,会抛出异常,测试代码如下:
- //猫科动物接口
- public interface Felidae {
- public String getName();
- }
- //Cat 类
- public class Cat implements Felidae{
- String catName="小猫咪";
- public String getName(){
- return catName;
- }
- }
- public class Lion implements Felidae{
- String lionName="狮子王";
- public String getName(){
- return lionName;
- }
- }
- public class Animal {
- @Autowired
- Felidae felidae;
- public String toString(){
- return felidae.getName();
- }
- }
- <?xml version="1.0" encoding="UTF-8"?>
- <beans
- xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:p="http://www.springframework.org/schema/p"
- xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.0.xsd
- ">
- <context:component-scan base-package="com.myspring2.annotation" />
- <!--自动扫描上边的包以及其子包 需要开启-->
- <bean id="animal" class="com.myspring2.annotation.Animal"></bean>
- <bean id="cat" class="com.myspring2.annotation.Cat">
- </bean>
- <bean id="lion" class="com.myspring2.annotation.Lion">
- </bean>
- </beans>
Cat类和Lion 类实现了同一个几口Felidae, 当在Animal 类中需要注入Felidae 是程序抛出了异常,原因是spring 找到了两个匹配的bean,所以无法确定 到底需要注入那个bean
,解决方法只需要在@Autowired 下边假如@Qualifier("cat")即明确告诉程序我们需要注入的bean,此处就是cat 了。
3.@Resource 次注解和 此注解和@Autowired 注解用法特别相似 ,只是其默认的Byname方法去匹配的,找不到再按Bytype 匹配的 ,@Autowired 是默认按bytype去匹配的
Spring 能够从 classpath 下自动扫描, 侦测和实例化具有特定注解的组件.特定的组件包括以下几个:
@Component:基本组件 标识了一个受spring 管理的组件,组件管理的通用形式,可以放在类上边, 一般都不推荐使用--开发中使用的比较少
@Repository :标识持久层组件
@Service :标识服务层组件
@Controller:标识表现层组件
对于这些组件spring有默认的命名策略, 一般是首字母小写,也可以通过注解中value 属性命名。
简单实例:
- //表现层
- @Controller
- @Scope(value="prototype")
- //用scope=prototype 来保证每次访问都是单独的action来处理spring 默认scope 是单例模式(scope="singleton"),这样只会创建一个Action对象,每次访问都是同一Action对象,数据不安全
- public class UserAction {
- @Autowired
- UserService userService;
- public void save(){
- userService.save();
- }
- }
- //服务层
- public interface UserService {
- public String save();
- }
- @Service
- public class UserServiceImpl implements UserService{
- @Autowired
- UserDao userDao;
- @Override
- public String save() {
- userDao.save();
- return "ok";
- }
- }
- //持久层
- @Repository
- public class UserDao {
- public void save(){
- System.out.println("dao save");
- }
- }
xml的配置文件中,需要开启自动扫描即可
Spring Ioc 常用注解的更多相关文章
- Spring IOC 常用注解与使用
@Component 注解@component代表spring ioc 会把这个类扫描生成Bean实例 @Component public class Role{ @Value("1&quo ...
- Spring MVC学习总结(2)——Spring MVC常用注解说明
使用Spring MVC的注解及其用法和其它相关知识来实现控制器功能. 02 之前在使用Struts2实现MVC的注解时,是借助struts2-convention这个插件,如今我们使 ...
- Spring学习总结(2)——Spring的常用注解
本文汇总了Spring的常用注解,以方便大家查询和使用,具体如下: 使用注解之前要开启自动扫描功能 其中base-package为需要扫描的包(含子包). ? 1 <context:compon ...
- Spring Boot 常用注解汇总
一.启动注解 @SpringBootApplication @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documen ...
- Spring Boot常用注解总结
Spring Boot常用注解总结 @RestController和@RequestMapping注解 @RestController注解,它继承自@Controller注解.4.0之前的版本,Spr ...
- 接近8000字的Spring/SpringBoot常用注解总结!安排!
0.前言 大家好,我是 Guide 哥!这是我的 221 篇优质原创文章.如需转载,请在文首注明地址,蟹蟹! 本文已经收录进我的 75K Star 的 Java 开源项目 JavaGuide:http ...
- Spring/SpringBoot常用注解总结
转自:[Guide哥] 0.前言 可以毫不夸张地说,这篇文章介绍的 Spring/SpringBoot 常用注解基本已经涵盖你工作中遇到的大部分常用的场景.对于每一个注解我都说了具体用法,掌握搞懂,使 ...
- Spring IoC 公共注解详解
前言 本系列全部基于 Spring 5.2.2.BUILD-SNAPSHOT 版本.因为 Spring 整个体系太过于庞大,所以只会进行关键部分的源码解析. 什么是公共注解?公共注解就是常见的Java ...
- Spring IOC 常用的注解
一.@Bean 1.配置类 @Configuration public class MainConfig { @Bean public Person person(){ return new Pers ...
随机推荐
- Centos7的防火墙关闭
第一步.centos7安装service 第二步. 或者可以不用service,有另一个办法.
- Webpack 使用url-loader和file-loader打包资源文件
在js中不仅可以通过import引入js文件,还可以引入图片.视频等资源文件,这样webpack打包时就会把所引入的资源文件也一起打包进来 打包进来的文件会返回一个字符串:即文件的路径 要做到这一点, ...
- Json.Net(Newtonsoft)系列教程 4.Linq To JSON
转自:https://www.cnblogs.com/sczmzx/p/7813834.html 一.Linq to JSON是用来干什么的? Linq to JSON是用来操作JSON对象的.可 ...
- mybatis动态sql之foreach标签
foreach 元素的功能非常强大,它允许你指定一个集合,声明可以在元素体内使用的集合项(item)和索引(index)变量.它也允许你指定开头与结尾的字符串以及在迭代结果之间放置分隔符.这个元素是很 ...
- Pandas分组级运算和转换
分组级运算和转换 假设要添加一列的各索引分组平均值 第一种方法 import pandas as pd from pandas import Series import numpy as np df ...
- 128bit 整数运算的实现
对于128bit的长整型运算,GCC提供了扩展类型:__int128.然而该类型不在C/C++语言的标准之中,并且对于不同种类的编译器,它的实现情况不同.因此,在编写相关的可移植程序时,我们有必要实现 ...
- java编译带中文是显示乱码的错误
FirstJava.java:3: 错误: 编码GBK的不可映射字符 System.out.println("娆㈣繋瀛︿範Java绋嬪簭锛?")锛? ^FirstJava.java ...
- 笔记之monkey参数(一)
monkey 参数 参数分类 常规类参数 事件类参数 约束类参数 调试类参数 常规类参数 常规类参数包括帮助参数和日志信息参数.帮助参数用于输出Monkey命令使用指导:日志信息参数将日志分为三个级别 ...
- 服务监控-zabbix监控指标
1.cpu unitzation 监控cpu的整体状态. 使用Zabbix查看CPU利用率,会有下面几个值: CPU idle time:空闲的cpu时间比[简称id] CPU user time:用 ...
- excel上传下载
protected void Button1_Click(object sender, EventArgs e) { if (ViewState["unitname"] != nu ...