1.set注入,上次讲到了是对一个类中通过set方法对其之中的普通类型,引用类型和复杂类型进行注入并赋值,增强类与类之间的关系。举例:
package pojo;
public class Cat {
}
public class Dog {
}
public class User {
private Dog dog;
private Cat cat;
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
public Cat getCat() {
return cat;
}
public void setCat(Cat cat) {
this.cat = cat;
}
@Override
public String toString() {
return "User [dog=" + dog + ", cat=" + cat + "]";
}
}
<bean id="user" class="pojo.User">
<property name="dog" ref="dog"></property>
<property name="cat" ref="cat"></property>
</bean>
<bean id="dog" class="pojo.Dog"></bean>
<bean id="cat" class="pojo.Cat"></bean>
在这其中可见通过<property>标签进行应用类型的注入,需要通过<bean>标签的id引入,和ref="id"标签的相配,才能找到所有引用类型的地址,bean标签相当于通过Spring容器去进行实体类的创建。
而对于@Autowired自动装配,也需要<bean>标签的id引入才行,因为,所有的类型需要被容器扫描到才能创建出相应的地址。
import org.springframework.beans.factory.annotation.Autowired;
public class User {
@Autowired
private Dog dog;
@Autowired
private Cat cat;
@Override
public String toString() {
return "User [dog=" + dog + ", cat=" + cat + "]";
}
}
在这其中,@Autowired只是创建出id,类似于<bean>文件一样,但是还需要在配置文件中配置相对应的类型,因为需要进行扫描。<bean id="dog" class="pojo.Dog"></bean> <bean id="cat" class="pojo.Cat"></bean> 此处的id值与@Autowired中所创造的id值是相匹配的private Dog dog(id); private Cat cat(id);因为进行扫描的时候,会通过id值的相同进行自动装配与注入
如果不想在配置文件中写<bean id="dog" class="pojo.Dog"></bean> <bean id="cat" class="pojo.Cat"></bean>这两句话,就需要在Dog类与Cat类中进行@Component注解的配置,进行包扫描,使得Spring容器启动,到对象创建都可以使得配置文件扫描到这两个类。