Spring使用注解代替xml配置

导包

Spring使用注解代替xml配置

导入命名空间

复制最上面的spring-context-4.2.xsd加斜杠/放入key末尾,并选择Schema location
Spring使用注解代替xml配置
然后右键applicationContext.xml Openwith XmlEditor
点击Design视图 beans右键Add后执行如下
Spring使用注解代替xml配置
然后按下面这样填写就可以了
Spring使用注解代替xml配置

在applicationContext开启使用注解代替配置文件

	<!--主键指定扫描这个com.itheima.domain下的所有注,
		这个包的子孙包也会扫描  -->
	<context:component-scan base-package="com.itheima.domain"></context:component-scan>

在类中完成配置注解

@Component("user")//相当于<bean name="user" class="com.zhicheng.domain.User"/>
public class User {

编写测试类并输出结果

public class TestDemo {
	@Test
	public void fun(){
	ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
	User user = (User) ac.getBean("user");
	System.out.println(user);
	}
}

Spring使用注解代替xml配置

注解解析

/*@Service("user")   和@Component效果一样,用于区分不同层的注解
@Controller("user")
@Repository("user")*/

@Component("user")//相当于<bean name="user" class="com.otheima.domain.User"/>
@Scope("prototype")//默认值为singleton单例,prototype为多例
public class User {
	//@Value("Tom")通过反射的Field赋值,破坏了封装性
	private String name;
	@Value("18")
	private Integer age;
	/*@Autowired//自动装配,问题:如果匹配多个类型一致的对象将无法选择具体注入哪一个对象
	@Qualifier("car2")//使用这个注解高速Spring容器匹配哪个名称
*/	
	@Resource(name="car2")//手动装配,直接使用这个就好
	private Car car;
	
	public String getName() {
		return name;
	}
	@Value("Tom")//通过set方法赋值,推荐使用
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	
	public Car getCar() {
		return car;
	}
	public void setCar(Car car) {
		this.car = car;
	}
	
	@Override
	public String toString() {
		return "User [name=" + name + ", age=" + age + ", car=" + car + "]";
	}
	@PostConstruct //在对象创建后调用
	public void init(){
		System.out.println("User创建方法");
	}
	@PreDestroy //在对象销毁前调用
	public void destory(){
		System.out.println("对象销毁方法");
	}
	
}