Spring中的@Autowired依赖注入
来源:互联网 发布:成都犀牛软件培训 编辑:程序博客网 时间:2024/04/30 09:49
@Autowired注解 注解能够作用于构建器、属性、方法。这里的方法不局限于设值方法,即setter方法,常见的各种方法都可以应用这一注解
@Autowired(required=false) 可以避免找不到bean时的抛出异常,每一个类只能有一个构造器被声明为required=false
@Autowired 是ByType的
下面举一个用于属性的实例:
第一步:完成xml与DAO类和其接口、Servicer类及其接口
核心xml:
<?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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd" > <context:component-scan base-package="com.imooc.beanannotation"></context:component-scan> </beans>
我们让Spring扫描 com.imooc.beanannotation
DAO类
package com.imooc.beanannotation;import org.springframework.stereotype.Repository;@Repositorypublic class InjectionDAOimpl implements InjectionDAO { public void save(String arg) { // TODO Auto-generated method stub System.out.println("保存数据:"+arg); }}
这里@Repository是关键,因为spring是通过这个注解认为这个类是DAO类的,@Repository 将 DAO 类声明为 Bean
如果没有这个注解@Repository,那么我们需要自己在Spring的配置文件中配置这个bean
DAO接口
package com.imooc.beanannotation;import org.springframework.stereotype.Repository;public interface InjectionDAO { public void save(String arg);}
Service类
package com.imooc.beanannotation;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;@Servicepublic class InjectionServiceimpl implements InjectionService { @Autowired private InjectionDAO injectionDAO; public void save(String arg) { // TODO Auto-generated method stub System.out.println("接受数据"+arg); arg=arg+":"+this.hashCode(); injectionDAO.save(arg); }}
这里@Service注解 和@Autowired 值得注意,@Service将该类标记为服务层,并加入bean,@Autowired为我们注入InjectionDAO接口
Service类接口
package com.imooc.beanannotation;public interface InjectionService { public void save(String arg);}
测试类:
package com.imooc.beanannotation;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestInjection { public static void main(String[] args) { ApplicationContext ctx=new ClassPathXmlApplicationContext("spring-beanannotation.xml"); InjectionService service=(InjectionService) ctx.getBean("injectionServiceimpl"); service.save("this is a autowired"); }}
可以看见 其实我们只需要getbean(接口(小写即默认名字))就可获得实现类的实例,这个例子证明我们可以用
@Autowired装配类以获取实例
这是@AutoWired用于构造器的例子
只需要修改Service类
package com.imooc.beanannotation;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;@Servicepublic class InjectionServiceimpl implements InjectionService { // @Autowired private InjectionDAO injectionDAO; @Autowired public InjectionServiceimpl(InjectionDAO injectionDAO) { this.injectionDAO=injectionDAO; } public void save(String arg) { // TODO Auto-generated method stub System.out.println("接受数据"+arg); arg=arg+":"+this.hashCode(); injectionDAO.save(arg); }}
请注意,原来我们在是在属性上用的@Autowired,现在用在构造器上。其实就相当于在构造方法中将InjectionDAO实例化了
注意下面的例子,这是一个很容易犯的错误
package com.imooc.beanannotation;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;@Servicepublic class InjectionServiceimpl implements InjectionService { @Autowired private InjectionDAO injectionDAO; public InjectionServiceimpl() { this.injectionDAO=injectionDAO; } public void save(String arg) { // TODO Auto-generated method stub System.out.println("接受数据"+arg); arg=arg+":"+this.hashCode(); injectionDAO.save(arg); }}这个时候运行是会出错的,这是因为程序会先运行构造方法,再装载InjectionDAO
0 0
- Spring中的@Autowired依赖注入
- Spring 依赖注入 @Autowired @Inject
- Spring依赖注入之@Inject,@Autowired,@Resource
- Spring中的依赖注入
- Spring中的依赖注入
- Spring中的依赖注入
- Spring中的依赖注入
- Spring 注解实现Bean依赖注入之@Autowired
- spring中的依赖注入方法
- spring @Autowired注入失败
- spring注入@autowired
- Spring自动注入,@Autowired
- Spring autowired 注入出错
- spring中的控制反转与依赖注入
- spring中的控制反转和依赖注入
- spring中的控制反转和依赖注入
- spring中的控制反转和依赖注入
- Spring 中的入门DI(依赖注入)
- java中常用的快捷键
- 第四周项目5:程序分析
- 人生第一次全马
- C语言中的特殊转义字符
- poj-2993-Emag eht htiw Em Pleh && poj-2996-Help Me with the Game
- Spring中的@Autowired依赖注入
- b+c 模式 H5 与 Android 混合 开发详解
- 构建高并发高可用的电商平台架构实践
- STL与泛型编程<十二>:Stream(流)迭代器
- 初学的c语言一些简单的练习题(自我练习)
- 写mapreduce时的注意点
- 相似度算法
- JSTL
- Thread详解6:synchronized的使用(二)