• spring4笔记----使用装配注入合作者Bean的三种方式


    1. no :不自动装配
    2. byName :id(name)与setter方法去set前缀,并小写首字母后同名的Bean完成注入,如有多个匹配则抛异常
    3. byType :spring容器找全部bean,如果找到单单一个bean类型和setter方法形参类型匹配的则完成注入,如有多个匹配则抛异常

    两个名字相同抛异常情况例子:

    Exception in thread "main" org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Bean name 'd' is already used in this <beans> element
    Offending resource: class path resource [beans.xml]
    
        at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:70)
        at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
        at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:80)
        at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.error(BeanDefinitionParserDelegate.java:301)
        at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.checkNameUniqueness(BeanDefinitionParserDelegate.java:511)
        at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseBeanDefinitionElement(BeanDefinitionParserDelegate.java:457)
        at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseBeanDefinitionElement(BeanDefinitionParserDelegate.java:429)
        at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.processBeanDefinition(DefaultBeanDefinitionDocumentReader.java:299)
        at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseDefaultElement(DefaultBeanDefinitionDocumentReader.java:190)
        at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:169)
        at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:142)
        at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:94)
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:508)
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:392)
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:336)
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:217)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:252)
        at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127)
        at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93)
        at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129)
        at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:612)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:513)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
        at com.ij34.bean.test.main(test.java:12)
    View Code

    接口

    package com.ij34.interfaces;
    
    public interface dog {
     public String run();
    }
    View Code
    package com.ij34.interfaces;
    
    public interface people {
       public void test();
    }
    View Code

    对象

    package com.ij34.servce;
    
    import com.ij34.interfaces.dog;
    
    public class Dog implements dog{
       private String name;
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    @Override
    public String run() {
        // TODO Auto-generated method stub
        return "我是一只阿拉斯加狗,名字叫:"+getName();
    }
       
    }
    View Code
    package com.ij34.servce;
    
    import com.ij34.interfaces.dog;
    
    public class Dog2 implements dog{
       private String name;
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    @Override
    public String run() {
        // TODO Auto-generated method stub
        return "我是一只哈奇士狗,名字叫:"+getName();
    }
       
    }
    View Code
    package com.ij34.servce;
    
    import com.ij34.interfaces.dog;
    import com.ij34.interfaces.people;
    
    public class People implements people{
      private dog d;
      
    
        public dog getD() {
        return d;
    }
    
    
    public void setD(dog d) {
        this.d = d;
    }
    
    
        @Override
        public void test() {
            // TODO Auto-generated method stub
            System.out.println("我是程序员:"+getD().run());
        }
    
    }
    View Code

    <?xml version="1.0" encoding="GBK"?>
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://www.springframework.org/schema/beans"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
    <bean id="chinese" class="com.ij34.servce.People" autowire="byName" />  <!-- 或者byType -->
    <bean name="d" class="com.ij34.servce.Dog" >
    <property name="name" value="牛仔1"></property>  
    </bean>
    
    <bean name="d1" class="com.ij34.servce.Dog2" >  <!-- 多个,另外的里面添加: autowire-candidate="false"-->
    <property name="name" value="大哈2狗"></property>
    </bean>
    </beans>

    运行

    package com.ij34.bean;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import com.ij34.servce.People;
    
    public class test {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
              @SuppressWarnings("resource")
            ApplicationContext app=new ClassPathXmlApplicationContext("beans.xml");
            People p=app.getBean("chinese", People.class);
            p.test();
        }
    
    }
    View Code

  • 相关阅读:
    completable 用法
    spring 纯注解方式 与AOP
    springIOC原理加载过程
    多线程手写Future模式
    springMVC 实现redis分布式锁
    java线程池学习
    本地跑 spark ui 报错
    九度oj 题目1452:搬寝室
    九度oj 题目1456:胜利大逃亡
    九度oj 题目1455:珍惜现在,感恩生活
  • 原文地址:https://www.cnblogs.com/tk55/p/6503526.html
Copyright © 2020-2023  润新知