如何让不受spring 接口注入管理的类具有spring 接口注入自动注入的特性

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&14329人阅读
JAVA技术专栏(24)
【问题描述】当我们在使用Spring的IOC功能的时候,Spring提供了集中注入方式:属性注入,构造函数注入和工厂方法注入,我们更多的时候是使用的属性注入,即set方法注入。使用set方法注入要求我们在写bean的配置文件的时候,需要我们手动设置properties。诸如:
&?xml version=&1.0& encoding=&UTF-8&?&
xmlns=&http://www.springframework.org/schema/beans&
xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance&
xmlns:p=&http://www.springframework.org/schema/p&
xsi:schemaLocation=&http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd&&
&bean id=&testBean& class=&com.jack.TestBean& scope=&prototype&/&
&bean id=&testAction& class=&com.jack.TestAction& scope=&prototype&&
&property name=&testBean& ref=&testBean&/&
这样使用Spring起来相当麻烦。
【问题分析以及解决办法】我们在想,会不会有那种自动注入的方法呢?就是不用我们在Spring配置文件里面写入
&property name=&testBean& ref=&testBean&/&之类的语句,用某种方法让Spring自己就知道注入哪种类型的对象。
当当当当。。。。。Spring这么smart的开源框架,早就给大家想到了。。。。他就是autowire
Spring的bean有一个autowire的属性,它可以为以下的6个&#20540;。
1、 No:即不启用自动装配。Autowire默认的值。
2、 byName:通过属性的名字的方式查找JavaBean依赖的对象并为其注入。比如说类Computer有个属性printer,指定其autowire属性为byName后,Spring IoC容器会在配置文件中查找id/name属性为printer的bean,然后使用Seter方法为其注入。
3、 byType:通过属性的类型查找JavaBean依赖的对象并为其注入。比如类Computer有个属性printer,类型为Printer,那么,指定其autowire属性为byType后,Spring IoC容器会查找Class属性为Printer的bean,使用Seter方法为其注入。
4、 constructor:通byType一样,也是通过类型查找依赖对象。与byType的区别在于它不是使用Seter方法注入,而是使用构造子注入。
5、 autodetect:在byType和constructor之间自动的选择注入方式。
6、 default:由上级标签&beans&的default-autowire属性确定
一般,我们在使用的时候都会用byName,这种也就是说,当我们定义bean的时候,在给bean取名的时候,约定俗成的讲bean的id设置成首字母小写的类名。在我上面的例子里面即是testBean和testAction,这样当我们在testAction里面要自动注入TestBean的时候。就要在里面写一个Set方法,当然set方法的命名也是有规范的,那就是要set&#43;类名,这里即是setTestBean。package com.
* @author Jack Zhang
* @version vb1.0
public class TestAction
private TestBean testB
public void setTestBean(TestBean testBean)
this.testBean = testB
public String execute()
testBean.getCode();
return &json&;
然后再更改配置文件:
&?xml version=&1.0& encoding=&UTF-8&?&
xmlns=&http://www.springframework.org/schema/beans&
xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance&
xmlns:p=&http://www.springframework.org/schema/p&
xsi:schemaLocation=&http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd&&
&bean id=&testBean& class=&com.jack.TestBean& scope=&prototype&/&
&bean id=&testAction& class=&com.jack.TestAction& scope=&prototype&autowire=&byName&/&
&/beans&有的人可能还会嫌麻烦,因为这样,每一个bean都要加上这一句,很多余,哈哈哈哈,spring项目组也给大家想到了,那就是看如下:
&?xml version=&1.0& encoding=&UTF-8&?&
xmlns=&http://www.springframework.org/schema/beans&
xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance&
xmlns:p=&http://www.springframework.org/schema/p&
default-autowire=&byName&
xsi:schemaLocation=&http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd&&
&bean id=&testBean& class=&com.jack.TestBean& scope=&prototype&/&
&bean id=&testAction& class=&com.jack.TestAction& scope=&prototype&/&
Okay,问题完美解决。。。。。。。。。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:165789次
积分:2261
积分:2261
排名:第12010名
原创:58篇
转载:16篇
评论:60条
(2)(1)(1)(1)(1)(5)(1)(1)(2)(2)(11)(5)(1)(1)(3)(2)(5)(1)(2)(3)(3)(1)(2)(5)(1)(5)(1)(5)怎么让spring自动的为类的属性注入,而不用配依赖关系_百度知道Spring MVC 自动为对象注入枚举类型 - 有乐窝
如果一个对象里面有枚举类型的话,则Spring MVC是不能够直接进行注入的,因为它只实现了一些基本的数据类型的自动转换注入,但是其也提供了可扩展的接口,可以根据自己的需要来进行扩展。下面是一个示例:
首先:这是一个枚举类:
* 新闻类别
* @author: ShangJianguo
上午10:51:07
public enum ENews {
company(&0&), // 企业新闻
industry(&1&);// 行业新闻
private final S
private ENews(String v) {
this.value =
public String toString() {
return this.
public static ENews get(int v) {
String str = String.valueOf(v);
return get(str);
public static ENews get(String str) {
for (ENews e : values()) {
if(e.toString().equals(str)) {
下面是个实体类:
public class News {
private EN
// 省略setter和getter方法
这里是controller层:
@RequestMapping(value=&/news/update&, method=RequestMethod.POST)
@ResponseBody
public boolean edit_update(Map&String, Object& model,HttpServletRequest request,News news){
String adminid = getAdminid();
news.init(adminSO.getAdminByAdminid(adminid).getUid());
if (news != null) {
if (newsSO.update(news)) {
但是,到了这里程序还不能够正常的运行,真正的要点在下面,写一个枚举的转换类(Converter):
public class StringToENewsConverter implements Converter&String, ENews&{
/* (non-Javadoc)
* @see com.fasterxml.jackson.databind.util.Converter#convert(java.lang.Object)
* @author: ShangJianguo
下午4:56:30
public ENews convert(String source) {
String value = source.trim();
if (&&.equals(value)) {
return ENews.get(Integer.parseInt(source));
然后在spring mvc的配置文件中进行配置:
&bean id=&conversionService& class=&org.springframework.format.support.FormattingConversionServiceFactoryBean&&
&property name=&converters&&
&bean class=&com.ngenius.core.converters.StringToENewsConverter& /&
&/property&
这样spring在进行对对象的字段进行注入的时候就可以运行了,直接把前端接收来的内容转换为ENews类型,进行封装。
转自:http://-qq-/blog/2079048
你还未登录,请先&&或者,

我要回帖

更多关于 spring注入方式 的文章

 

随机推荐