使用隐式 setter 自动装配和 ComponentScan 将 spring xml 转换为 java 配置
Converting spring xml to java configuration with implicit setter autowiring and ComponentScan
我有两个 class:vehicle.Tire 和 vehicle.Car。
package vehicle;
@Named
public class Tire {
private String age;
}
package vehicle;
@Named
public class Car {
private Tire tire;
// Spring calls this setter because default-autowire="byName" of xml configuration
public void setTire(Tire newTire) {
this.tire = newTire;
}
public Tire getTire() {
return this.tire;
}
}
以下 spring xml 工作正常。
<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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
default-autowire="byName">
<context:component-scan base-package="vehicle" />
</beans>
我尝试在上面创建一个 java 配置:
@Configuration
@ComponentScan(basePackages={"vehicle"})
public VehicleConfig {
}
我没有在classes中使用@Inject和@Autowired注解,但是springautowires 并且它适用于 xml。
使用java配置,没有调用Car的setTire方法:(
缺少什么?如何更改 java 配置 使用 组件扫描 而无需 修改汽车和轮胎 classes? default-autowire="byName" xml 标签属性等同于 java 吗?
我使用上面的 class 来测试 java 配置
@Test
public class VehicleConfigTest {
public void testTire() {
AnnotationConfigApplicationContext applicationContext =
new AnnotationConfigApplicationContext();
applicationContext.register(VehicleConfig.class);
applicationContext.refresh();
Car car = applicationContext.getBean(Car.class);
Assert.assertNotNull(car.getTire());
}
}
提前致谢。
在 sprig java 配置中没有等效于 default-autowire="byName" 全局 xml 标签属性。
此外,正确的注入方式是通过cdi使用@Inject注解或通过spring使用@Autowired注解。所以,class Car 应该修改:
package vehicle;
@Named
public class Car {
@Inject
private Tire tire;
public Tire getTire() {
return this.tire;
}
}
现在,xml 或 java 配置都有效。
我有两个 class:vehicle.Tire 和 vehicle.Car。
package vehicle;
@Named
public class Tire {
private String age;
}
package vehicle;
@Named
public class Car {
private Tire tire;
// Spring calls this setter because default-autowire="byName" of xml configuration
public void setTire(Tire newTire) {
this.tire = newTire;
}
public Tire getTire() {
return this.tire;
}
}
以下 spring xml 工作正常。
<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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
default-autowire="byName">
<context:component-scan base-package="vehicle" />
</beans>
我尝试在上面创建一个 java 配置:
@Configuration
@ComponentScan(basePackages={"vehicle"})
public VehicleConfig {
}
我没有在classes中使用@Inject和@Autowired注解,但是springautowires 并且它适用于 xml。 使用java配置,没有调用Car的setTire方法:(
缺少什么?如何更改 java 配置 使用 组件扫描 而无需 修改汽车和轮胎 classes? default-autowire="byName" xml 标签属性等同于 java 吗?
我使用上面的 class 来测试 java 配置
@Test
public class VehicleConfigTest {
public void testTire() {
AnnotationConfigApplicationContext applicationContext =
new AnnotationConfigApplicationContext();
applicationContext.register(VehicleConfig.class);
applicationContext.refresh();
Car car = applicationContext.getBean(Car.class);
Assert.assertNotNull(car.getTire());
}
}
提前致谢。
在 sprig java 配置中没有等效于 default-autowire="byName" 全局 xml 标签属性。
此外,正确的注入方式是通过cdi使用@Inject注解或通过spring使用@Autowired注解。所以,class Car 应该修改:
package vehicle;
@Named
public class Car {
@Inject
private Tire tire;
public Tire getTire() {
return this.tire;
}
}
现在,xml 或 java 配置都有效。