day38 07-Spring框架Bean的时候方式

Spring是自动帮我们创建对象的,有几种创建Bean的方式呢?

构造方法实例化:(默认无参数)其实就是反射new Instance().

静态工厂实例化:

实例工厂实例化:

一般不会改变它实例化的方式。其他两种了解一下即可。

<?xml version="1.0" encoding="UTF-8"?>
<!-- 别去schema,schema是文件,本地的文件,你得引那个头 -->

<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">
<!-- demo1快速入门================================================= -->
<!-- 把接口和实现类在这个配置文件中配置,有了实现类的全路径之后到时候才能用工厂反射 -->

   <!-- 通过一个<bean>标签来设置类的信息,通过id属性为类起个标识. -->
    <!-- 接口,实现类,配置文件也都有了 -->
    <!-- 现在有一个工厂Spring为我们提供好了,其实就是解析这个XML文件 -->
    <!-- 这个工厂你自己写会不会写?你用dom4j找里面的bean标签,找到class的属性值,然后就可以Class.forName()反射生成类的实例.其实Spring
         也是这么做的,只不过工厂由Spring提供好了
     -->
    <bean id="helloService" class="cn.itcast.spring3.demo1.HelloServiceImpl">
         <!-- 使用<property>标签注入属性
         value指的是普通值
         ref指的是对象
         -->
    <property name="info"  value="传智播客"></property>
    </bean>
    <!-- demo1快速入门 -->
    <!-- demo2Bean的实例化 -->
    <!-- 默认情况下使用的就是无参数的构造方法. -->

    <bean id="bean1" class="cn.itcast.spring3.demo2.Bean1"></bean>
    <!-- 第二种使用静态工厂实例化 不能写class了,因为现在不是由Spring直接帮你创建对象了-->
    <bean id="bean2" class="cn.itcast.spring3.demo2.Bean2Factory" factory-method="getBean2"></bean>
    <!-- 第三种使用实例工厂实例化 -->
    <bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"></bean>
    <!-- 要先把Bean3Factory实例化 -->
    <bean id="bean3Factory" class="cn.itcast.spring3.demo2.Bean3Factory"></bean>

</beans>
package cn.itcast.spring3.demo2;
/**
 * 使用无参数的构造方法实例化
 * @author zhongzh
 *
 */
public class Bean1 {
/*public Bean1(String name){//这里写了一个带参构造,那么无参构造就不执行了
    //有一个有参无参就没有了

}*/
    public Bean1(){
        System.out.println("使用无参数的构造方法实例化Bean1方法.....");
    }
}
package cn.itcast.spring3.demo2;
/**
 * 使用静态工厂的方式实例化
 * @author zhongzh
 *
 */
public class Bean2 {

}
package cn.itcast.spring3.demo2;
/**
 * 使用实例工厂实例化
 * @author zhongzh
 *
 */
public class Bean3{
    //加载配置文件的时候就会加载这个类了,会帮你创建了

}
package cn.itcast.spring3.demo2;
/**
 * Bean2的静态工厂
 * @author zhongzh
 *
 */
public class Bean2Factory {
   public static Bean2 getBean2(){
     System.out.println("静态工厂的获得Bean2的方法....");
    return new Bean2();//什么是静态工厂?就是这里提供一个静态的方法来返回Bean2的实例

   }
}
package cn.itcast.spring3.demo2;
/**
 * 使用实例工厂
 * @author zhongzh
 *
 */
//实例工厂与静态工厂的唯一区别是它里面的方法是不是静态的
public class Bean3Factory {
        public Bean3 getBean3(){
            System.out.println("Bean3实例工厂的getBean3方法.....");
            return new  Bean3();
        }
}
package cn.itcast.spring3.demo2;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Bean的实例化的方式
 *
 * @author zhongzh
 *
 */
public class SpringTest2 {
@Test
public void demo1(){
    //无参数的构造方法的实例化
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");//实例化工厂
    Bean1 bean1 = (Bean1) applicationContext.getBean("bean1");//通过配置文件里面配置的key获得bean1

      System.out.println(bean1);
}
@Test
public void demo2(){
    //静态工厂的实例化
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");//实例化工厂
    Bean2 bean2 = (Bean2) applicationContext.getBean("bean2");//通过配置文件里面配置的key获得bean2

    System.out.println(bean2);
}
@Test
//实例工厂实例化
public void demo3(){
    //静态工厂的实例化

    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");//实例化工厂
    Bean3 bean3 = (Bean3) applicationContext.getBean("bean3");//通过配置文件里面配置的key获得bean2

    System.out.println(bean3);
}
}
时间: 2024-10-27 04:46:24

day38 07-Spring框架Bean的时候方式的相关文章

Spring框架bean的配置(2):SpEL:引用 Bean、属性和方法。。。

1.SpEL,实现 Person类,其属性如下,其get,set,tostrong方法就不写了 private String name; private Car car; private String city;//city属性是引用了Address中city的属性 private String info;//根据car的price属性来确定info,price大于30万,不大于30万 car类,其属性如下,set,get,tostring方法就不写了 private String brand;

spring框架 事务 注解配置方式

user=LF password=LF jdbcUrl=jdbc:oracle:thin:@localhost:1521:orcl driverClass=oracle.jdbc.driver.OracleDriver initialPoolSize=15 maxPoolSize=30 minPoolSize=5 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www

Spring中Bean的配置方式之FactoryBean

Spring 中有两种类型的 Bean, 一种是普通Bean, 另一种是工厂Bean, 即FactoryBean. 工厂 Bean 跟普通Bean不同, 其返回的对象不是指定类的一个实例, 其返回的是该工厂 Bean 的 getObject 方法所返回的对象 相关代码: Car.java private String brand; private double price; CarFactoryBean.java public class CarFactoryBean implements Fa

Spring 获取bean 几种方式

转载自: http://www.cnblogs.com/luoluoshidafu/p/5659574.html 1.读取xml文件的方式,这种在初学入门的时候比较适用 . ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:tt.xml"); ApplicationContext applicationContext = new FileSystemXmlAppli

03 Spring框架 bean的属性以及bean前处理和bean后处理

上一节我们给出了三个小demo,具体的流程是这样的: 1.首先在aplicationContext.xml中添加<bean id="自定义id" class="包名.类名">.(还有两种工厂配置) 2.其次写一个自定义类,里面只包含一个系统输出的show(). 3.使用 ApplicationContext hw=new classpathXmlApplicationContext("applicationContext.xml");

Spring中Bean的配置方式之通过工厂方法

通过调用静态工厂方法创建Bean 调用静态工厂方法创建 Bean是将对象创建的过程封装到静态方法中. 当客户端需要对象时, 只需要简单地调用静态方法, 而不同关心创建对象的细节. 要声明通过静态方法创建的 Bean, 需要在 Bean 的 class 属性里指定拥有该工厂的方法的类, 同时在 factory-method 属性里指定工厂方法的名称. 最后, 使用 <constrctor-arg> 元素为该方法传递方法参数. 相关代码: Car.java private String brand

Spring框架bean的配置(3):基于注解的配置,Autowired 自动装配 Bean,泛型依赖注入

1.基于注解的配置: @Component: 基本注解, 标识了一个受 Spring 管理的组件 @Respository: 标识持久层组件 @Service: 标识服务层(业务层)组件 @Controller: 标识表现层组件 建立接口:UserRepository package com.atguigu.spring.beans.annotation.test; public interface UserRepository { void save(); } 建立类:UserReposito

Spring框架---IOC装配Bean

IOC装配Bean (1)Spring框架Bean实例化的方式提供了三种方式实例化Bean 构造方法实例化(默认无参数,用的最多) 静态工厂实例化 实例工厂实例化 下面先写这三种方法的applicationContext.xml配置文件: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans&

spring的配置介绍和bean的管理方式

前言 不管说什么框架,我们总是难以逃脱该框架的配置文件,所以接下来我们就要讲述一下spring的配置文件的相关标签的配置,另外会介绍一下spring的bean的管理方式(XML文件中). spring的配置 id属性和name属性 id:给bean起个名字,在约束中采用 ID 的约束,唯一,必须以字母开始,可以使用字母.数字.连字符.下划线.句话.冒号,不能出现特殊字符. <bean id=”bookAction”> name:给bean起个名字,没有采用 ID 的约束.name出现特殊字符,