Spring(三、Spring Bean自动装配和注解注入)

1.在XML中进行自动装配
实现类

public class Person {
public void write(){
    System.out.println("我是一个人");
}
}
public class Student {
    private int id;
    private String name;
    private Person person;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Person getPerson() {
        return person;
    }
    public void setPerson(Person person) {
        this.person = person;
    }


}

配置文件

<bean id="person" class="com.iotek.bean.Person"></bean>
    <bean id="stu" class="com.iotek.bean.Student" autowire="byName"></bean>

测试类

public class Demo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
   ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
   Student stu=context.getBean("stu",Student.class);
   stu.getPerson().write();
   }

spring容器自动装配Bean,需要的参考就是bean的autowire属性,自动装配有3中方式:
(1)根据名称自动装配(byName)。因为spring 容器中Bean的名称是唯一的,所以不会产生歧义,推荐使用这种方式。
(2)根据类型自动装配(byType)。在Spring容器中可能会找到多个跟需要注入的bean的类型相同的Bean,所以会产生歧义,Spring容器不知道注入哪个Bean,这时会抛出异常。
(3)根据构造器自动装配(constructor)。
详解(3):
a)装配bean构造方法中相对应的ID,如果没有的则在配置文件中手动装配:

  <bean id="stu" class="com.iotek.bean.Student" autowire="constructor">
      <constructor-arg name="card" ref="card"> </constructor-arg>
      <constructor-arg name="name" value="aaa"></constructor-arg>
    </bean>

2.使用注解实现自动装配
(1)使用注解形式装配bean,而不用再配置文件中配置bean
(2)Spring默认是关闭注解的
i.必须开启注解
ii.在表头添加context的信息

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    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-4.0.xsd">

iii.开启

<context:annotation-config></context:annotation-config>

iv.@Autowired:::注解的使用(不用再写set方法)

    @Autowired
    private Person person;

自动检测bean

<context:component-scan base-package="com.iotek.bean"></context:component-scan>

为包下的对象自动生成Bean:[每个类上添加:@Component(“代表bean Id”)]

@Component("student")
public class Student {

完整代码示例:
第一步:在配置文件里面进行配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    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-4.0.xsd">
   <!-- 1.引入约束内容xmlns:context    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"         
   2.配置spring扫描注解 
        context:component-scan : 可以扫描到类上面和属性上面的和方法上面的注解
        context:annotation-config: 可以扫描只是属性上面的注解 -->
    <context:annotation-config></context:annotation-config>
    <context:component-scan base-package="com.iotek.bean"></context:component-scan>  
    </beans>

第二步:创建类

//类似于之前xml配置文件
  <bean id="person" class="com.iotek.bean.Person">
@Component("person")
public class Person {
public void write(){
    System.out.println("我是一个人");
}
}

第三步:创建测试类

public class Demo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
   ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
   Person person=context.getBean("person", Person.class);
   person.write();
    }
}

Bean管理常用的注解
第一部分注解:用来生成类对象
注解 功能
@Component 生成类对象
@Repository 用于对Dao实现类进行标注
@Service 用于对Service实现类进行标注
@Controller 用于对Controller实现类进行标注
这四个注解的功能是一样的,都是用来生成类的对象,可以使用在类上面

@Controller(value="person")
public class Person{

}

第二部分注解:做注入的操作,把类对象注入到另一个类中
在此类中声明要注入的对象所在类,作为一个属性,不需要set方法
使用@Autowried进行自动注入(自动装配),根据类对象名称,找到类的对象

@Autowried
private Person person;

使用@Resource(name=”值”)实现指定哪个对象注入

    @Resource(name="person")
    private Person person;

示例:
第一步:创建实体类

import org.springframework.stereotype.Component;

@Component("person")
public class Person {
public void write(){
    System.out.println("我是一个人");
}
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component("student")
public class Student {
@Resource(name="person")
    private Person person;

public void read(){
    person.write();
}
}

第二步:在配置文件里面进行配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    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-4.0.xsd">
   <!-- 1.引入约束内容xmlns:context    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"         
   2.配置spring扫描注解 
        context:component-scan : 可以扫描到类上面和属性上面的和方法上面的注解
        context:annotation-config: 可以扫描只是属性上面的注解 -->
    <context:annotation-config></context:annotation-config>
    <context:component-scan base-package="com.iotek.bean"></context:component-scan>  
</beans>

第三步:创建测试类

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.iotek.bean.Person;
import com.iotek.bean.Student;

public class Demo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
   ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
   Student stu=context.getBean("student",Student.class);
   stu.read();
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值