为什么用Autowired标识注入不了bean

geqmoon 2010-07-08 03:22:36
小弟写了一个spring程序,测试spring依赖注入,但是用用Autowired标识注入不了bean,请大家赐教!!
以下是程序代码
applicationContext.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"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:annotation-config/>
<context:component-scan base-package="*"/>

<bean id="user" class="pojo.User" autowire="byName">
<property name="userName">
<value>tangjun</value>
</property>
</bean>
</beans>

User.java
package pojo;
public class User implements java.io.Serializable {
private Long id;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
private String userName;
private String userPassword;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}

}

PrintUser.java
package service;
import pojo.User;

public interface PrintUser {
public void printString(User user);
}

PrintUserImpl.java
package service;

import org.springframework.stereotype.Service;

import pojo.User;
@Service
public class PrintUserImpl implements PrintUser {

public void printString(User user) {
System.out.println(user.getUserName());
}
}

Test.java
package pojo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import service.PrintUserImpl;

public class Test {
private User user;

public User getUser() {
return user;
}
@Autowired
public void setUser(User user) {
this.user = user;
}
protected PrintUserImpl printUserImpl;

public static void main(String[] args) {
Test test = new Test();
System.out.print(test.printUserImpl);
test.printUserImpl.printString(test.user);
}
}
...全文
1067 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
mndn_nana 2010-07-08
  • 打赏
  • 举报
回复
Autowired
用的不多,经验欠缺
CoderPlusPlus 2010-07-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 geqmoon 的回复:]
引用 6 楼 ibm_hoojo 的回复:
恩恩,你的这个方法我试过了,那样能取到对象
我只是想试试直接用autowired注入对象,但是这种方法没有注入成功。。
[/Quote]
自动不是你想的那个样子,也是spring在生成对象的时候set进去的,你自己new的对象spring管不到……
geqmoon 2010-07-08
  • 打赏
  • 举报
回复
好的。。。。。。。。。。
hoojo 2010-07-08
  • 打赏
  • 举报
回复
可以吧,你仔细看看spring的api
geqmoon 2010-07-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ibm_hoojo 的回复:]
CSS code

<bean id="user" class="pojo.User" autowire="byName">
pojo.User 对象中的setter只会根据name进行装载的

my God!

public static void main(String[] args) {
Test test = new Test();
System.out.print(te……
[/Quote]
恩恩,你的这个方法我试过了,那样能取到对象
我只是想试试直接用autowired注入对象,但是这种方法没有注入成功。。
hoojo 2010-07-08
  • 打赏
  • 举报
回复

<bean id="user" class="pojo.User" autowire="byName">
pojo.User 对象中的setter只会根据name进行装载的

my God!

public static void main(String[] args) {
Test test = new Test();
System.out.print(test.printUserImpl);
test.printUserImpl.printString(test.user);
}
你用spring就这样测试啊,你用spring,你的对象就被spring容器管理了。
你就要在spring容器中去这个对象。这怎么能new?
ApplicationContext ctx=new ClassPathXmlApplicationContext("spring-action-bean.xml");
User user= (User) ctx.getBean("user");
要通过spring上下文去取对象
geqmoon 2010-07-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ibm_hoojo 的回复:]
CSS code

在applicationContext.xml中加入
<!-- 该 BeanPostProcessor 将自动起作用,对标注 @Autowired 的 Bean 进行自动注入 -->
<bean class="org.springframework.beans.factory.annotation.
AutowiredAnnot……
[/Quote]
这个我试过了,<context:annotation-config/>
就包含对以上bean的引用
问题还是存在啊
hoojo 2010-07-08
  • 打赏
  • 举报
回复

在applicationContext.xml中加入
<!-- 该 BeanPostProcessor 将自动起作用,对标注 @Autowired 的 Bean 进行自动注入 -->
<bean class="org.springframework.beans.factory.annotation.
AutowiredAnnotationBeanPostProcessor"/>

geqmoon 2010-07-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 simaa0106 的回复:]
protected PrintUserImpl printUserImpl;没有get,set方法
test.printUserImpl.printString(test.user);报空指针。上面是空的,下面肯定也是空的啦
[/Quote]
不好意思,丢了get,set方法
但是现在改成
@Autowired
protected PrintUserImpl printUserImpl;

public PrintUserImpl getPrintUserImpl() {
return printUserImpl;
}
public void setPrintUserImpl(PrintUserImpl printUserImpl) {
this.printUserImpl = printUserImpl;
}
还是不行啊
simaa0106 2010-07-08
  • 打赏
  • 举报
回复
protected PrintUserImpl printUserImpl;没有get,set方法
test.printUserImpl.printString(test.user);报空指针。上面是空的,下面肯定也是空的啦
geqmoon 2010-07-08
  • 打赏
  • 举报
回复
System.out.print(test.printUserImpl);报空指针
test.printUserImpl.printString(test.user);报空指针

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧