Spring注解的基础使用
1.关键jar包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
2.applicationContext.xml引入约束
xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context
http://www.springframework.org/schema/beans/spring-context.xsd
3…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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 指定扫描cn.itcast.bean报下的所有类中的注解.
注意:扫描包时.会扫描指定报下的所有子孙包
-->
<context:component-scan base-package="com.eilas.bean"/>
<bean name="car2" class="com.eilas.bean.Car">
<property name="name" value="布加迪威龙" ></property>
<property name="color" value="black" ></property>
</bean>
</beans>
4.bean类加注解
Car.java
package com.eilas.bean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component("car")
public class Car {
@Value("玛莎拉蒂")
private String name;
@Value("呕吐绿")
private String color;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@Override
public String toString() {
return "Car [name=" + name + ", color=" + color + "]";
}
}
User.java
package com.eilas.bean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;
//@Component("user")
// @Service("user") // service层
// @Controller("user") // web层
@Repository("user")// dao层
//<bean name="user" class="com.eilas.bean.User"/>
@Scope(scopeName = "singleton")//prototype
public class User {
private String name;
@Value("2")//通过反射的Field赋值,破坏了封装性
private Integer age;
// @Autowired//自动装配
// //问题:如果匹配多个类型一致的对象.将无法选择具体注入哪一个对象. 这两个一起配合使用
// @Qualifier("car2")
@Resource(name = "car2")//手动注入,指定注入哪个名称的对象 推荐使用
private Car car;
public User() {
}
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
@Value("liming")//通过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;
}
@PostConstruct //在对象被创建后调用.init-method
public void init() {
System.out.println("我是初始化方法");
}
@PreDestroy
public void destory() {
System.out.println("我是销毁方法");
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", car=" + car +
'}';
}
}
测试
myTest .java
package com.eilas.test;
import com.eilas.bean.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class myTest {
@Test
public void test01() {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
User u = (User)context.getBean("user");
System.out.println(u);
((ClassPathXmlApplicationContext) context).close();//加这个才能看到销毁方法
}
}
总结步骤:
0.导包4+2+spring-aop
1.为主配置文件引入新的命名空间(约束)
2.开启使用注解代理配置文件
3.在类中使用注解完成配置
开始注解
a.将对象注册到容器
b.修改对象的作用范围
c-1.值类型注入
c-2.引用类型注入
d.初始化|销毁方法