Java 弹簧自动接线行为
我有下一个简单的applicationclass消息,它只有一个方法可以打印传入消息,并且对这个问题不感兴趣:Java 弹簧自动接线行为,java,spring,Java,Spring,我有下一个简单的applicationclass消息,它只有一个方法可以打印传入消息,并且对这个问题不感兴趣: package messager.spring; public class User { private Messenger misiger; private String name; public User(String name) { this.name = name; } public void setMessenge
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;
// }
}
主要类别:
Spring配置文件:
我对类用户自动布线Messanger类使用了自动布线。根据文件:
当使用ByName时,它会尝试将其属性与配置文件中由相同名称定义的bean进行匹配和关联。如果找到匹配项,它将注入这些bean,否则将抛出异常
这个配置可以工作,但我不明白为什么在用户类中没有名为messenger的属性,我故意将其更改为misiger。它仍然有效。看起来bean id并不是直接依赖于属性名,而是依赖于setter名!!!是这样吗?通过查看命名约定,JavaBeans就是这样工作的 基础引用不一定相关
您的属性名为messenger,因为有一个getter叫做它。通过查看命名约定,JavaBeans就是这样工作的 基础引用不一定相关
您的属性名为messenger,因为有一个名为messenger的getter。是的,您是对的。如上所述: Spring将把方法名中“set”之后的第一个字母小写,并按原样使用方法名的其余部分来推导属性名
因此,不是成员变量,而是setter定义属性名 是的,你是对的。如上所述: Spring将把方法名中“set”之后的第一个字母小写,并按原样使用方法名的其余部分来推导属性名
因此,不是成员变量,而是setter定义属性名 简单地说,更改setter name和id=misiger并查看它是否失败,若失败,那个么spring是通过setter方法完成的。我认为它确实使用了setter,或者完全删除了setter方法。我认为它确实使用了setter,或者完全删除了setter方法。
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...");
}
}
<?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>