B_第03章:核心容器


在xml中配置一个bean,<bean id="person" class="org.example.demob.Person"/>。那么在main方法中,可以使用 Person p=(Person)factory.getBean("person") 来获取Person的对象。

Bean的配置:三中给你方式:
        1,基于xml
        2,基于配置
    spring通过<bean>配置来实现实例化,配置bean的属性已经配置bean直接的相互依赖。

    @Component注解在CleanAir类声明处,这样就可以被spring容器进行识别,自动将POJO转换成为容器管理的bean。
        和 <bean id="CleanAir" class="org.test.ClassAir"/> 等效。
    和@Component等价的还有下面三个,这四个配置的功能是相同的,只是为了让类的用途更加的清晰:
        @Rspository:对于dao实现类进行注解
        @Service:用于server的注解
        @Controller:用于controller的注解

    普通的POJO类只要进行了@Configuration注解,就可以为spring容器提供bean定义的信息。每个标注了@Bean的类方法都相当于提供了一个bena的定义信息。


Bean的注入:3中方式。1,属性注入,2,构造函数注入,3,工厂方法注入。

    1,基于属性注入,此方法需要setName()方法,注入名称为name。
        public class Bird {
            private String name;
            public String getName() {return name;}
            public void setName(String name) {this.name = name;}  //实现一个set方法,在进行配置的时候可以使用
        }

        <bean id="bird" class="org.example.demob.Bird">
            <property name="name" value="小鸟"/>
        </bean>

        public class RunningB {
            public static void main(String[] args) {
                ApplicationContext applicationContext=new ClassPathXmlApplicationContext("ApplicationContext.xml");
                BeanFactory beanFactory=applicationContext;
                Bird bird =(Bird) beanFactory.getBean("bird");
                System.out.println(bird.getName());
            }
        }

    2,基于构造函数的注入:
        public class Bird {
            public Bird(String name) {
                this.name=name;
            }
            private String name;
            public String getName() {return name;}
            public void setName(String name) {this.name = name;}
        }

        <bean id="bird" class="org.example.demob.Bird">
            <constructor-arg index="0" value="小鸟"/>
        </bean>

常用注解介绍:
    @Autowired:默认按类型匹配注入bean,可以对成员变量,方法,构造函数进行标注,完成自动装配工作。当匹配结果包含多个是,会按照名称进行匹配
    @Required:适用于bean的setter方法。表示此方法在xml文件中必须进行配置,否则报错。
    @Qualifier:@Autowired默认是单例的,当一个类的属性是一个接口,这个接口的具体实现,可以使用此注解来确定。
    @Value:配置默认值:
        @Value("小鸟")
        private String name;
    @Resource:默认按名称进行匹配
        @Resource(name = "dogName")
        public void setName(String name) {this.name = name;}


bean的作用域和生命周期:
    bean容器启动后,会先读取bean的xml配置文件,然后将xml中每个bean元素分别转换成BeanDefinition对象。在BeanDefinition对象中有scope属性,就是他控制着bean的作用域。
        <bean id="bird" class="org.example.demob.Bird" scope="prototype"> 原型,每次获取的hashcode不同
        <bean id="bird" class="org.example.demob.Bird" scope="singleton"> 单例,每次获取的hashcode相同

B_第03章:核心容器

上一篇:SetForegroundWindow以及 如何将一个某个窗口提到最顶层(转)


下一篇:java——文件读取内容方法