Spring注解方式使用与注册bean
2015-09-18 13:19
579 查看
这次使用注解来完成注入功能,首先我们先直接使用bean,仍然是在容器里定义Bean,然后我们使用装配,首先装配的是Resource注解,这个注解是java自带的,需要指定注解路径。
可以标注要装配的bean名字,可以在属性上标记,也可以在setter上标记。
例如:
Resource是先按照名字再按照类型去装配。
接下来是Autowired注解和Qualifier注解。
这两个注解是Spring支持的,Autowired用法基本与Resource一致,想指定具体的名字可以采用与Qualifier结合使用的方式,例如:
可以在使用Autowried的bean里设置Autowired为使用名字还是使用类型去装配,例如刚才这些装配的代码均在UserService里的,UserService这个bean在容器里的配置可以如下:
注意这里就算使用了Autowried(required=false)和Qulifier依然会报错.这应该在判断类型之后,或则是Qulifier与byType产生冲突吧。
下面我们来处理如何用注解的方式去注册bean,首先我们将要扫描注册为bean的包放在spring配置文件里:
这样
我们使用服务层的bean:
userDao实现类的bean注册:
Service , Controller,Compoent都可以指定bean名字,这是spring保留给不同的层使用的注解,如果不指定名字,bean的名字默认为注册类的名字(第一个字母改成小写)
UserDaoImpl还有个name属性,怎样让导入的实例注入不同的属性,这是个值得思考的问题。
<context:annotation-config /> <context:component-scan base-package="annotation"></context:component-scan>
可以标注要装配的bean名字,可以在属性上标记,也可以在setter上标记。
例如:
@Resource //默认按名字,也可以 @Resource("userDao1")去指定bean名字 private UserDao userDao;
@Resource //这里在setter上去标注 public void setUserDao(UserDao userDao) { this.userDao = userDao; }
Resource是先按照名字再按照类型去装配。
接下来是Autowired注解和Qualifier注解。
这两个注解是Spring支持的,Autowired用法基本与Resource一致,想指定具体的名字可以采用与Qualifier结合使用的方式,例如:
@Autowired(required=false) //这里false和true代表如果注入失败false会报错,true会置为null,但是要结合Qualifer注解使用,否则false和true均会报错 @Qualifier("userDao1") private UserDao userDao; @Autowired @Qualifier("userDao2") public void setUserDao2(UserDao userDao2) { this.userDao2 = userDao2; }
可以在使用Autowried的bean里设置Autowired为使用名字还是使用类型去装配,例如刚才这些装配的代码均在UserService里的,UserService这个bean在容器里的配置可以如下:
<bean id="userService1" class="annotation.UserService" autowire="byName">//或则byType,如果有多个同样的type会报错 </bean>
注意这里就算使用了Autowried(required=false)和Qulifier依然会报错.这应该在判断类型之后,或则是Qulifier与byType产生冲突吧。
下面我们来处理如何用注解的方式去注册bean,首先我们将要扫描注册为bean的包放在spring配置文件里:
这样
<context:component-scan base-package="dao"></context:component-scan> <context:component-scan base-package="service"></context:component-scan>
我们使用服务层的bean:
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); UserService userService = (UserService)context.getBean("us"); userService.test();
//这个Service本身也注册为一个名为us的bean @Service("us") @Scope("singleton") public class UserService { @Resource(name="udl")//用Resource注解,指定了要装配bean的名字,这里的udl为UserDao接口的一个实现类的bean名字 private UserDao userDao1; private UserDao userDao2; public UserDao getUserDao1() { return userDao1; } public void setUserDao1(UserDao userDao1) { this.userDao1 = userDao1; } public UserDao getUserDao2() { return userDao2; } //Autowired方法指定名字 @Autowired(required=false) @Qualifier("udl") public void setUserDao2(UserDao userDao2) { this.userDao2 = userDao2; } @PostConstruct //指定初始化方法,使用本bean都会首先执行 public void initMethod() { System.out.println("---这是注解初始化的方法----"); } //打印 public void test() { System.out.println("-------"); if(userDao1 != null) { userDao1.save(); } System.out.println("-------"); if(userDao2 != null) { userDao2.save(); } System.out.println("-------"); } }
userDao实现类的bean注册:
@Service("udl") public class UserDaoImpl implements UserDao { /* * */ }
Service , Controller,Compoent都可以指定bean名字,这是spring保留给不同的层使用的注解,如果不指定名字,bean的名字默认为注册类的名字(第一个字母改成小写)
UserDaoImpl还有个name属性,怎样让导入的实例注入不同的属性,这是个值得思考的问题。
相关文章推荐
- eclipse常用快捷键
- Java命令行运行参数说明大全(偷来的)
- Struts验证框架应用
- maven构建的模块化的JavaWeb工程
- WebService学习笔记(八)Spring与CXF整合客户端
- 程序员的Eclipse/MyEclipse就是要炫酷吊炸天
- java语言内部类和匿名内部类
- 泣血推荐 各种java 技术api地址
- Java中的equals与hashCode方法(判断插入容器的内容是否重复)
- Java基础知识强化25:JDBC(Java Data Base Connectivity,java数据库连接)
- Java参考链接
- 【JAVA】数据库中一些ResultSet的用法实例
- java面向对象总结
- java语法基础
- Java环境变量设置
- kafka+storm整合 java示例
- Spring事务管理只对出现运行期异常进行回滚
- Eclipse、Idea快捷键对比
- Java构造方法的含义和使用
- java计算两个经纬度相对的方向角