为了账号安全,请及时绑定邮箱和手机立即绑定
  • xml方式的Bean自动注入(<beans>标签的属性default-autowire=byName

    No:不做任何操作,默认选项。

    byname:根据setXXX()方法的set后的名称进行自动注入(首字母不区分大小写)。查找xml中有没有<bean>标签id的名称与属性完全一致的,如果有则自动注入,并且执行set方法,基于set方法,如果没有不报错,该属性置为NULL,并且不执行set()。

    byType:根据类型自动注入,如果容器中存在一个与指定属性类型相同的bean,那么该属性自动注入;如果存在多个该类型bean,那么抛出异常,并指出不能使用byType方式进行自动装配,如果没有找到相匹配的bean,则什么事都不发生,该属性置为null基于set方法。

    Constructor:与byType方式类似,不同之处在于它应用于构造器参数。如果容器中没有找到与构造器参数类型一个bean,那么抛出异常。

    Spring官方文档对自动注入属性的四种类型解释

    https://img1.sycdn.imooc.com//5ceb3ef20001bd5812380646.jpg


    案例:(原理:IOC容器加载XML配置文件,由于设置了自动按名称进行注入,所以当获取Bean1的实例时,查找XML文件中有没有Id为set方法后的名称(去掉set,并且不区分大小写),如果有则进行自动注入)

    步骤1:

    编写两个类,并在其中一个类中引用其他类作为自己的属性,而且必须提供set方法。

    步骤2:

    编写xml文件

    <beans>标签添加 default-autowire="byName"

    并且对着两个类进行<bean>配置。

    代码:


    public class Bean1{

    private Bean2 bean2;

    public Bean2 getBean3() {

    return bean2;

    }

    public void setBean3(Bean2 bean2) {

    this.bean2 = bean2;

    }

    }
    xml:

    <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

            http://www.springframework.org/schema/beans/spring-beans.xsd" 

            default-autowire="byName">

       <bean id="bean1" class="main.java.com.imooc.Bean1"></bean>

       <bean id="bean3" class="main.java.com.imooc.Bean2"></bean>

     </beans>

    结果:

    Bean1 [bean2=main.java.com.imooc.Bean2@2ec5f45d]

    当default-autowire="byType"时:则会根据属性的类型查找xml中是否有和它相同的类型的<bean>(也就是class),如果有以一个则进行注入,如果一个以上则报异常,没有则为null。

    通过构造方法实现自动注入:

    步骤1:提供构造方法为属性赋值。

    代码:


    public class Bean1{

    private Bean2 bean2;


    public Bean1(Bean2 bean2) {

    super();

    this.bean2 = bean2;

    }


    步骤2:xml中设置default-autowired="constructor”,并且提供和有参构造函数的参数相同类型的一个<bean>标签。

    代码:


    <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

            http://www.springframework.org/schema/beans/spring-beans.xsd" 

            default-autowire="constructor">

       <bean id="bean1" class="main.java.com.imooc.Bean1"></bean>

       <bean class="main.java.com.imooc.Bean2"></bean>

     </beans>

    结果:

    Bean2@5c5766b1

    查看全部
  • Aware接口

    定义:Spring中提供了一些以Aware结尾的接口,实现了Aware接口的Bean在被初始化后,可以获取相应资源,通过Aware接口,可以对Spring相应资源进行操作(慎重),前提配置<bean>标签,并使用ioc容器去记性加载。

    ApplicationContextAware:Bean类实现该接口通过该接口提供的方法,可以直接获取spring上下文,而不用我们自己手动创建。

    BeanNameAware:Bean类实现该接口通过该接口提供的方法,可以直接获取<bean>标签的Id。

    ApplicationEventPublisherAware:提供事件的发布。

    BeanClassLoaderAware:找到相关的类加载器。

    案例:通过传入的Bean的ID和传入的ApplicationContext对象,来获取Bean的对象(原理:IOC容器加载配置文件,通过<bean>标签,去实例化Bean,由于实现了XXXAware接口,通过setXXX方法,去获取相应的资源


    public class MoocApplicationContext implements ApplicationContextAware,BeanNameAware {

    private String name;(通过这种方式就可以在其他方法中进行使用该对象,例如判断某个对象是否存在)

    @Override

    public void setApplicationContext(ApplicationContext ac) throws BeansException {

    System.out.println("setApplicationContext的ApplicationContext:"+ac.hashCode());

    System.out.println(ac.getBean(this.name,MoocApplicationContext.class));

    }

    @Override

    public void setBeanName(String name) {

    this.name=name;

    System.out.println("setBeanNamename的方法"+name);

    }


    }

    xml:

       <bean id="moocApplicationContext" class="MoocApplicationContext" ></bean>

    测试:


    @Test

    public void testMooc(){

    ApplicationContext ac=new ClassPathXmlApplicationContext("spring-ioc.xml");

    System.out.println("test的ApplicationContext:"+ac.hashCode());

    }

    结果:

    setBeanNamename的方法moocApplicationContext

    setApplicationContext的ApplicationContext:1516607441

    MoocApplicationContext@4c7335b1

    test的ApplicationContext:1516607441


    查看全部
  • 接口是用于隐藏具体实现和实现多态性的组件

    IOC控制反转,就是控制权的转移,应用程序本身不负责依赖对象的创建和维护,而是由外部容器(spring)负责创建和维护

    查看全部
    0 采集 收起 来源:IOC及Bean容器

    2019-05-16

  • Bean容器初始化

    查看全部
    0 采集 收起 来源:IOC及Bean容器

    2019-05-15

  • 单元测试截图

    查看全部
    0 采集 收起 来源:IOC及Bean容器

    2019-05-15

  • IOC房屋中介

    查看全部
    0 采集 收起 来源:IOC及Bean容器

    2019-05-14

  • 控制反转,依赖注入

    查看全部
    0 采集 收起 来源:IOC及Bean容器

    2019-05-14

  • spring中所有的对象都是bean


    查看全部
    0 采集 收起 来源:Spring概况

    2019-05-13

  • @Autowired由Spring BeanPostProcessor处理,所以不能在自己的BeanPostProcessor或BeanFactoryPostProcessor中应用@Autowired注解,否则会产生循环依赖

    查看全部
  • <context:annotation-config>只会识别类中关于方法的注解

    查看全部
  • AOP in Spring

    查看全部
  • relevant concepts in AOP

    查看全部
  • AOP implement types

    查看全部
  • The definition of IoC

    查看全部
    0 采集 收起 来源:IOC及Bean容器

    2019-05-09

  • 如何定义好的切入点

    查看全部

举报

0/150
提交
取消
课程须知
Java的高级课程,适合对Java基础知识应用自如,并熟悉MVC架构的小伙伴们。如果想成为一名Java工程师,这门课程是一定要学哒。
老师告诉你能学到什么?
掌握依赖注入、IOC和AOP的概念,并能进行简单应用。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!