bean.xml

<!--spring的依赖注入
        注入的方式有三种:
            1,使用构造函数注入
            2,使用set方法注入
            3.使用注解注入
        注入的数据类型有三种:
            1,基本类型和string类型
            2,其他bean类型
            3,复杂类型(集合类型) 
     -->
<!-- 构造函数注入
        标签:constructor-arg
        涉及的属性:
            type:指定参数的类型
            index:指定参数的索引位置,从0开始
            name:指定参数的名称
            ==========上面三个属性是指定给哪个参数赋值,下面两个属性是指定给参数赋什么值===================
            value:指定基本数据类型或string类型的数据
            ref:指定其他bean类型数据
    -->
<bean id="customerService" class="service.impl.CustomerServiceImpl">
        <constructor-arg name="name" value="user"></constructor-arg>
        <constructor-arg name="password" value="123"></constructor-arg>
        <constructor-arg name="customerDao" ref="customerDao"></constructor-arg>
    </bean> <bean id="customerDao" class="dao.impl.CustomerDaoImpl"></bean>

CustomerServiceImpl.class

public class CustomerServiceImpl implements CustomerService {
    private String name;
    private String password;
    private CustomerDao customerDao;

    /*
     * 构造函数注入
     * 提供构造函数让参数注入
     */
public CustomerServiceImpl(String name, String password,CustomerDao customerDao) {
    this.name = name;
    this.password = password;
    this.customerDao = customerDao;
    }

    public void saveCustomer(){
    System.out.println("业务层调用持久层   "+name+" "+password);
    customerDao.saveCustomer();
    }
}

bean.xml

<!-- set方法注入
        name:指定参数的名称
        value:指定基本数据类型或string类型的数据
        ref:指定其他bean类型数据
     -->

    <!-- <bean id="customerService" class="service.impl.CustomerServiceImpl">
        <property name="name" value="user"></property>
        <property name="password" value="123"></property>
        <property name="customerDao" ref="customerDao"></property>
    </bean> -->

CustomerServiceImpl.class

public class CustomerServiceImpl implements CustomerService {
    private String name;
    private String password;
    private CustomerDao customerDao;

    public void saveCustomer(){
    System.out.println("业务层调用持久层   "+name+" "+password);
    customerDao.saveCustomer();
    }

    /* set方法注入
     * 生成set方法以让数据注入
     */

   /* public void setName(String name) {
        this.name = name;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public void setCustomerDao(CustomerDao customerDao) {
        this.customerDao = customerDao;
    }
    */

}

bean.xml

<!-- 当配置了注解之后,要告知spring在创建容器时要扫描的包,配置了该标签后,spring才会去指定的包以及其子包下找相应的注解
 -->
     <context:component-scan base-package="service"></context:component-scan>
    <context:component-scan base-package="dao"></context:component-scan>

CustomerServiceImpl.class

/*
 * 
 * 注解:
 * <bean id="customerService" class="service.impl.CustomerServiceImpl"></bean>
 * 创建bean对象
 *  @Component
 *      作用相当与配置一个bean标签,有一个id属性,默认为首字母小写的类名
 *  由此注解衍生了的三个注解:
 *      @Controller 用于表现层的注解
 *              @Service    用于业务层的注解
 *              @Repository 用于持久层的注解
 *      它们和@Component的作用和属性一模一样
 * 注入数据:
 *  @Autowired
 *      作用:自动按照类型注入
 *      如果注入的bean在容器中类型不唯一,即一个接口有多个实现类,它会把变量名作为bean的id,在容器中查找,找到后也能注入成功
 *      如果没有找到一致的id,就会报错
 *      @Qualifier
 *      作用:在自动按照类型注入的基础上,再按照bean的id注入       
 *      属性:
 *          value:用于指定bean的id
 *  @Resource
 *      作用:直接按照id进行注入   
 *      属性:
 *          name:用于指定bean的id
 *  以上三个注解都是用于注入其他bean类型,而注入基本数据类型和string类型用@Value
 *  @Value
 *      属性:
 *          value:用于指定要注入的数据
 *  它可以借助spring中的el${}表达式读取properties文件中的配置    
 *  
 * 改变作用范围:
 *  @Scope  
 *       作用:用于改变bean的作用范围
 * 
 */
@Service("customerServiceImpl")
public class CustomerServiceImpl implements CustomerService {
    @Value("aaa")
    private String name;
    @Value("123")
    private String password;

    //@Resource(name="customerDaoImpl")
    //@Qualifier("customerDaoImpl")
    @Autowired
    private CustomerDao customerDao;


    public void saveCustomer(){
    System.out.println("业务层调用持久层   "+name+" "+password);
    customerDao.saveCustomer();
    }    
}

bean.xml文件可以用一个class代替

/*
 * 一个spring的配置类,相当于bean.xml
 */

//@Configuration//他就是把当前类看出spring的配置类,一般也可以不用
@ComponentScan({"service","dao"})
public class SpringConfiguration {

}