实体类: Dog:
package com.itcast.pojo; public class Dog { public void show(){ System.out.println("这是一只狗"); } }Cat:
package com.itcast.pojo; public class Cat { public void show(){ System.out.println("这是一只猫"); } }Person:
package com.itcast.pojo; public class Person { private String name; private Dog dog; private Cat cat; public Person() { } public Person(String name, Dog dog, Cat cat) { this.name = name; this.dog = dog; this.cat = cat; } public String getName() { return name; } public void setName(String name) { this.name = name; } 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 "Person{" + "name='" + name + '\'' + ", dog=" + dog + ", cat=" + cat + '}'; } }①byName,会自动在容器上下文查找和自己对象set后面的名字值对应的beanid! *.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" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"> <bean name="dog" class="com.itcast.pojo.Dog"/> <bean name="cat" class="com.itcast.pojo.Cat"/> <bean name="person" class="com.itcast.pojo.Person" autowire="byName"> <property name="name" value="unvi"/> </bean> </beans>测试:
public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); Person person = context.getBean("person", Person.class); person.getDog().show(); person.getCat().show(); }结果:
②byType,会自动在容器上下文查找和自己对象类型对应的beanid! *.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" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"> <bean name="dog11" class="com.itcast.pojo.Dog"/> <bean name="cat22" class="com.itcast.pojo.Cat"/> <bean name="person" class="com.itcast.pojo.Person" autowire="byType"> <property name="name" value="unvi"/> </bean> </beans>测试:
public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); Person person = context.getBean("person", Person.class); person.getDog().show(); person.getCat().show(); }结果:
The introduction of annotation-based configuration raised the question of whether this approach is “better” than 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 https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <context:annotation-config/> </beans>修改: @Autowired 【通过byType】 @Autowired可以直接标注在属性名上,也可以标注在set方法上; 使用@Autowired还可以不写对应的set方法,前提这个属性在spring容器中有装配,符合命名规范 【@Qualifier(value = “cat111”)指定获取唯一beanid】 Person:
package com.itcast.pojo; import org.springframework.beans.factory.annotation.Autowired; public class Person { private String name; @Autowired private Dog dog; @Autowired private Cat cat; public Person() { } public Person(String name, Dog dog, Cat cat) { this.name = name; this.dog = dog; this.cat = cat; } public String getName() { return name; } public void setName(String name) { this.name = name; } 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 "Person{" + "name='" + name + '\'' + ", dog=" + dog + ", cat=" + cat + '}'; } }*.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 https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <context:annotation-config/> <bean name="cat" class="com.itcast.pojo.Cat"/> <bean name="dog" class="com.itcast.pojo.Dog"/> <bean name="person" class="com.itcast.pojo.Person"/> </beans>测试和结果和上面一样;
============================================================
*.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 https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <context:annotation-config/> <!-- 扫描包--> <context:component-scan base-package="com.itcast.pojo"/> </beans>实体类: Cat:
package com.itcast.pojo; import org.springframework.stereotype.Component; @Component public class Cat { public void show(){ System.out.println("这是一只猫"); } }Dog:
package com.itcast.pojo; import org.springframework.stereotype.Component; @Component public class Dog { public void show(){ System.out.println("这是一只狗"); } }Person:
package com.itcast.pojo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component public class Person { @Value("unvi") private String name; @Autowired private Dog dog; @Autowired // @Qualifier(value = "cat111") private Cat cat; public Person() { } public Person(String name, Dog dog, Cat cat) { this.name = name; this.dog = dog; this.cat = cat; } public String getName() { return name; } public void setName(String name) { this.name = name; } 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 "Person{" + "name='" + name + '\'' + ", dog=" + dog + ", cat=" + cat + '}'; } }/** @Component 相当于在xml中注册bean!
<bean name="xxx" class="com.itcast.pojo.xxx"/>@Compoent 的衍生(功能都一样) Dao:@Repository Service:@Service Controller:@Controller
*/ 属性值基本类型的用@Value(“XXX”); 引用类型的用@AutoWired 测试: 使用这种方式:自动装配到spring容器中的id为该类的类名
public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); Person person = context.getBean("person", Person.class); System.out.println(person.getName()); person.getDog().show(); person.getCat().show(); }结果:
注解开发和xml配置: xml更加万能,适用于任何的场合,维护简单 注解不是自己的类用不了,维护复杂
【xml和注解的配合】 xml用来管理bean 注解负责属性的注入
使用注解!!一定要开始注解支持!!
<context:annotation-config/> <context:component-scan base-package="com.itcast.pojo"/>