在开发中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 常用注解的更多相关文章

  1. Spring IOC 常用注解与使用

    @Component 注解@component代表spring ioc 会把这个类扫描生成Bean实例 @Component public class Role{ @Value("1&quo ...

  2. Spring MVC学习总结(2)——Spring MVC常用注解说明

        使用Spring MVC的注解及其用法和其它相关知识来实现控制器功能. 02     之前在使用Struts2实现MVC的注解时,是借助struts2-convention这个插件,如今我们使 ...

  3. Spring学习总结(2)——Spring的常用注解

    本文汇总了Spring的常用注解,以方便大家查询和使用,具体如下: 使用注解之前要开启自动扫描功能 其中base-package为需要扫描的包(含子包). ? 1 <context:compon ...

  4. Spring Boot 常用注解汇总

    一.启动注解 @SpringBootApplication @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documen ...

  5. Spring Boot常用注解总结

    Spring Boot常用注解总结 @RestController和@RequestMapping注解 @RestController注解,它继承自@Controller注解.4.0之前的版本,Spr ...

  6. 接近8000字的Spring/SpringBoot常用注解总结!安排!

    0.前言 大家好,我是 Guide 哥!这是我的 221 篇优质原创文章.如需转载,请在文首注明地址,蟹蟹! 本文已经收录进我的 75K Star 的 Java 开源项目 JavaGuide:http ...

  7. Spring/SpringBoot常用注解总结

    转自:[Guide哥] 0.前言 可以毫不夸张地说,这篇文章介绍的 Spring/SpringBoot 常用注解基本已经涵盖你工作中遇到的大部分常用的场景.对于每一个注解我都说了具体用法,掌握搞懂,使 ...

  8. Spring IoC 公共注解详解

    前言 本系列全部基于 Spring 5.2.2.BUILD-SNAPSHOT 版本.因为 Spring 整个体系太过于庞大,所以只会进行关键部分的源码解析. 什么是公共注解?公共注解就是常见的Java ...

  9. Spring IOC 常用的注解

    一.@Bean 1.配置类 @Configuration public class MainConfig { @Bean public Person person(){ return new Pers ...

随机推荐

  1. Django应用app创建及ORM

    一.重要知识点回顾: 1. form表单提交数据的注意事项: 1. 是form不是from,必须要有method和action (action用来指定你的数据提交到后台哪个地方,method用来指定你 ...

  2. Cygwin工具安装和使用指导书

    前言 Cygwin是一个在windows平台上运行的类UNIX模拟环境.它可以满足你在Windows系统上学习Linux基本命令操作.脚本调试的基本需求. Cygwin使用优点介绍 1.Cygwin安 ...

  3. 让anujs支持rc-select

    git clone git@github.com:react-component/select.git cd select npm i babel-plugin-antd --save-dev npm ...

  4. 可视化svg深入理解viewport、viewbox、preserveaspectradio

    直接运行此例子 深入理解svg的viewport.viewbox.preserveaspectradio实例 <!DOCTYPE html> <html lang="en& ...

  5. 《Dare To Dream》第七次作业:团队项目设计完善&编码测试

    任务一:团队项目<软件设计方案说明书>Github链接:https://github.com/Sophur/Team-Project 任务二:项目集成开发环境: (1)JSP技术 JSP( ...

  6. 2018.5.12 storm数据源kafka堆积

    问题现象: storm代码依赖4个源数据topic,2018.5.12上午8点左右开始收到告警短信,源头的4个topic数据严重堆积. 排查: 1.查看stormUI, storm拓扑结构如下: 看现 ...

  7. 移动端目标识别(3)——使用TensorFlow Lite将tensorflow模型部署到移动端(ssd)之Running on mobile with TensorFlow Lite (写的很乱,回头更新一个简洁的版本)

    承接移动端目标识别(2) 使用TensorFlow Lite在移动设备上运行         在本节中,我们将向您展示如何使用TensorFlow Lite获得更小的模型,并允许您利用针对移动设备优化 ...

  8. IDEAL启动项目的时候报java.lang.NoClassDefFoundError: javax/servlet/Filter错误

    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring- ...

  9. Redhat系统上开启Telnet服务

    https://blog.csdn.net/wolfofsiberian/article/details/51635952 1.操作系统 Redhat Step1:修改配置文件/etc/xinetd. ...

  10. Windows 窗体

    Windows系统,顾名思义,就是窗口系统,每一个程序都可以用窗口来展示,所以,为了展示窗口,需要多做一系列的工作,当然,也有纯控制台应用,就不用附带窗口了. 首先就是窗口程序的入口地址,与传统的in ...