Spring复习(二)

FactoryBean

FactoryBean是一个接口,需要创建一个类实现该接口

package com.mao.pojo;

import org.springframework.beans.factory.FactoryBean;

public class StudentFactoryBean implements FactoryBean {
    //getObject方法将对象交给Spring容器来管理
    @Override
    public Object getObject() throws Exception {
        return new Student();
    }
    
    //设置所提供的的对象的类型
    @Override
    public Class getObjectType() {
        return Student.class;
    }
    
    //设置是否单例
    @Override
    public boolean isSingleton() {
        return FactoryBean.super.isSingleton();
    }
}

将该类交给spring容器来管理


测试:

ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
Student studentFactory = (Student) applicationContext.getBean("studentFactory");
System.out.println(studentFactory);

基于XML的自动装配

自动装配:根据指定的策略在IOC容器中匹配一个bean,自动为指定的bean中所依赖的类类型或接口类型赋值

基于XML的自动装配是在spring核心配置文件中,通过配置bean中的autowire属性来指定自动装配的策略


autowire有四种装配策略:
no,default表示不装配,即bean中的属性不会自动匹配某个bean为属性赋值
byType:根据属性的类型进行赋值
a>若通过类型没有找到任何一个类型匹配的bean,此时不装配,使用默认值
b>若通过类型找到了多个类型匹配的bean,此时会抛出异常
总结:使用byType实现自动装配时,IOC容器有且只有一个类型匹配的bean能够为属性赋值。
byName:根据要赋值的属性的属性名,例如:< property name=“UserService”>来进行赋值
当类型匹配的bean有多个时,可以使用byName来实现自动装配

基于注解来管理bean

@Component:将类标识为普通组件,即将类加载为bean交给springioc来管理
@Controller:将类标识为控制层组件
@Service:将类标识为业务层组件
@Repository:将类标识为持久层组件

在Spring中开启注解扫描

在spring核心配置文件中添加:

 
    
    

context:exclude-filter:排除扫描

 	
    
    	
        
        
        
         

context:include-filter:包含扫描


    
        
    

需要配置use-default-filters:false,使默认扫描指定包包含全部的功能失效,否则包含扫描就不起作用。

注意:通过注解+扫描配置的bean的id,默认值为类的小驼峰即UserController的bean的id为userController
自定义id:
Spring复习(二)_第1张图片

@Autowired

通过@Autowired注解可以实现自动装配功能
Spring复习(二)_第2张图片

@Autowired原理

a>默认通过byType的方式,在IOC容器中通过类型匹配某个bean为属性赋值
b>若IOC容器中有多个相同类型的bean,此时会自动转换成byName的方式来为属性赋值,即将要赋值的属性名作为bean的id来匹配某个bean
c>如果byType和byName都无法实现自动装配,且IOC容器中有多个类型匹配的bean,且这些bean的id和要赋值的属性的属性名都不一致。
d>可以通过@Qualifier的value值来指定某个bean的id来为属性赋值

注意:若IOC容器中没有任何一个类型匹配的bean,在@Autowired中有个属性(require=true),该属性要求必须完成自动装配,否则就报错,可以将require=false,来避免出现该情况

你可能感兴趣的:(spring,java,mybatis)