springmcv @Resource 注解问题

问题如
http://zhaoshunxin.iteye.com/blog/1166266

请各位大侠给看看

[code="java"]
@Resource("helloService")
public class HelloService(){
...
}

[/code]
在类Class上的注解应该使用诸如@Service、@Controller、@Repository等,只有在引用实例的使用才使用注解@Resource,而且应该加上属性name(表示被引用资源的名称),即“@Resource(name="helloService")”
所以,上面正确的写法应该是这样的:
([color=red]创建[/color]一个名称为helloService的实例)
[code="java"]
@Service(name="helloService")
public class HelloService(){
...
}

[/code]
然后在Controller包中这样使用:
([color=red]引用[/color]这个名称为helloService的实例)
[code="java"]
@Controller
public class HelloController{
Resource(name="helloService")
private HelloService helloService;
}

[/code]

@Resource
private HelloService helloService;

要定义以"helloService"为名称的bean

我试了一下:
[code="java"]public class HelloController implements Controller{

private Logger logger = Logger.getLogger(this.getClass().getName());
private String helloWorld; // 该属性用于获取配置文件中的helloWorld属性
private String viewPage;        // 用于获取配置文件中的viewPage属性
@Resource //为什么不能使用@Resource
private HelloService helloService;[/code]

[code="java"]@Service
public class HelloService {
@Resource //为什么不能使用@Resource
private HelloDao helleDao;[/code]

[code="java"]@Repository
public class HelloDao {
static ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//得到数据源
private static DataSource ds=(DataSource) context.getBean("dataSource");
static JdbcTemplate jt1=(JdbcTemplate) context.getBean("jt");
public String getId(){
String sql =" select * from test order by code";
Map map =jt1.queryForMap(sql);
System.out.println(""+map.get("CODE"));
return map.get("CODE").toString();
}

}[/code]

只是将DAO小改了一下,然后使用resource都是可以的。

只要你注解配置没问题,完全可以使用。
通常情况下,@Resource默认是按[color=red]名称[/color]匹配的,按你的配置,它应该默认创建单例[color=red]H[/color]elloService(主要H是大写的)

通常情况下,我是这样写的:
[code="java"]
[color=red]@Service(name="helloService")[/color]
public class HelloService {
@Resource //为什么不能使用@Resource
private HelloDao helleDao;
[/code]
然后再Controller包中这样引用:
[code="java"]
public class HelloController implements Controller{

private Logger logger = Logger.getLogger(this.getClass().getName());
private String helloWorld; // 该属性用于获取配置文件中的helloWorld属性
private String viewPage;        // 用于获取配置文件中的viewPage属性
@Resource //为什么不能使用@Resource
    [color=red]@Resource(name="helloService")[/color]
private HelloService helloService;

[/code]