我有下一个简单的应用程序(类消息只有一个打印传入消息的方法,对此问题没兴趣):
package messager.spring;
public class User {
private Messenger misiger;
private String name;
public User(String name) {
this.name = name;
}
public void setMessenger(Messenger messinger) {
this.misiger = messinger;
}
public void send(String mess) {
String message = name + " sent message " + "'" + mess + "'";
misiger.send(message);
}
// public String getname() {
// return name;
// }
}
主要课程:
package messager.spring;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
User user = (User) context.getBean("user");
user.send("testing3...");
}
}
Spring配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="user" class="messager.spring.User" autowire="byName">
<constructor-arg type="java.lang.String" value="Vova2"/>
</bean>
<bean id="messenger" class="messager.spring.MobileMessenger"/>
</beans>
我使用自动装配类用户自动装配Messanger类。根据文件:
当使用 ByName 时,它会尝试匹配并将其属性与配置文件中相同名称定义的bean相连。如果找到匹配项,它将注入那些bean,否则会抛出异常。
此配置有效,但我不明白为什么((我在用户类中没有名称 messenger 的属性(((我故意将其更改为 misiger 。它仍然有效。看来bean id不直接取决于属性名称,而是取决于setter名称!!!是这样吗?
答案 0 :(得分:3)
答案 1 :(得分:1)
通过查看命名约定,了解JavaBeans的工作原理。
基础参考不一定相关。
您的媒体资源的名称是messenger
,因为有一个名为getter的getter。