基于XML管理Bean

2.2.1、案例
  1. 创建 Maven Moudle

  2. 引入依赖

 <dependencies>
        <!-- 基于Maven依赖传递性,导入spring-context依赖即可导入当前所需的所有jar包 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.28</version>
        </dependency>
        <!-- junit测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
 </dependencies>

         3. 创建类Student

        4. 创建Spring的配置文件 applicationContext.xml

        5. 在Spring的配置文件中配置bean

 

 6. 创建测试类测试

注意:在Spring中获取bean,默认是通过反射调用无参构造方法,所以类中必须要提供一个无参构造方法

  1. 结果

2.2.2、获取Bean的三种方式
  1. 根据bean的id获取

  2. 根据bean的类型获取

    要求在配置文件中只能有一个该类匹配的bean,若有多个该类的Bean,会报错:NoUniqueBeanDefinitionException: No qualifying bean of type 'com.my.pojo.Student' available: expected single matching bean but found 2: studentOne,studentTwo

  3. 根据bean的id和类型获取

Spring的bean默认是单例的,若想多例,在bean标签中添加 scope="prototype"

  1. 如果组件类实现了接口,可以根据接口类型获取bean

    注意:bean得是唯一的

根据类型来获取bean时,在满足bean唯一性的前提下,只要:对象 instanceOf 类 的返回结果是true就可以认定为和类型匹配,能过获取到。

通过bean的的类型、bean所继承的类的类型,bean所实现的接口的类型都可以获取bean

2.2.3、依赖注入

为类中的属性赋值的过程就为依赖注入。

  1. setter注入

<bean id="studentOne" class="com.my.pojo.Student">
    <!--
        property:通过成员变量的set方法赋值
        name:设置需要赋值的属性名(和类的set方法有关)
        value:设置为属性所赋的值
    -->
    <property name="stuid" value="123456"></property>
    <property name="sname" value="zhangsan"></property>
    <property name="score" value="123"></property>
</bean>
  1. 构造器注入

<bean id="studentTwo" class="com.my.pojo.Student">
    <!--
        与 public Student(String stuid, String sname, int score)构造方法相对应
        可以通过name来指定属性匹配指定的构造器
    -->
    <constructor-arg value="123456"></constructor-arg>
    <constructor-arg value="zhangsan"></constructor-arg>
    <constructor-arg value="123" name="score"></constructor-arg>
</bean>
  1. 特殊值处理

<bean id="studentFour" class="com.my.pojo.Student">
    <!--
        在value中的值会被当做字面量,如果value=null,这该null为"null"
        注意:在xml中和html一样,一些特殊字符要进行处理
        比如: >:&lt;
              <:&gt;
    -->
    <property name="stuid" value="1003"></property>
    <property name="sname">
        <null></null>
    </property>
    <property name="score" value="1003"></property>
</bean>
  1. 为类属性赋值

  • 引用外部bean

<!-- 班级bean-->
<bean id="clsOne" class="com.my.pojo.Cls">
    <property name="cid" value="111"></property>
    <property name="cname" value="如此这班"></property>
</bean>
​
<bean id="studentFive" class="com.my.pojo.Student">
    <property name="stuid" value="123456"></property>
    <property name="sname" value="zhangsan"></property>
    <property name="score" value="123"></property>
    <!--
        ref:引用,其中的值为bean的id
    -->
    <property name="cls" ref="clsOne"></property>
</bean>
  • 级联方式

<bean id="studentSix" class="com.my.pojo.Student">
    <property name="stuid" value="123456"></property>
    <property name="sname" value="zhangsan"></property>
    <property name="score" value="123"></property>
    <property name="cls" >
        <!--
            内部bean,只能在该IOC容器内使用,不能直接通过IOC容器获取
        -->
        <bean id="clsInner" class="com.my.pojo.Cls">
            <property name="cid" value="111"></property>
            <property name="cname" value="如此这班"></property>
        </bean>
    </property>
</bean>
  1. 为数组属性赋值

<bean id="studentOne" class="com.my.pojo.Student">
    <property name="stuid" value="123456"></property>
    <property name="sname" value="zhangsan"></property>
    <property name="score" value="123"></property>
    <property name="hobby">
        <array>
            <!--
                value:为字面量属性赋值
                ref:为类类型的属性赋值
            -->
            <value>吃饭</value>
            <value>睡觉</value>
            <value>打豆豆</value>
        </array>
    </property>
</bean>
  1. 为List集合类型赋值

<bean id="clsTwo" class="com.my.pojo.Cls">
    <property name="cid" value="111"></property>
    <property name="cname" value="如此这班"></property>
    <property name="students">
        <list>
            <!--
                value:为字面量属性赋值
                ref:为类类型的属性赋值
            -->
            <ref id="studentOne"></ref>
            <ref id="studentTwo"></ref>
        </list>
    </property>
</bean>
  1. 为map集合赋值

<bean id="studentOne" class="com.my.pojo.Student">
    <property name="stuid" value="123456"></property>
    <property name="sname" value="zhangsan"></property>
    <property name="score" value="123"></property>
    <property name="teacherMap">
        <!--
            key:字面量作为键
            key-ref:类类型作为键
            value:字面量作为值
            value-ref:类类型作为值
        -->
        <map key="张三" value="李老师"></map>
    </property>
</bean>
  1. Spring管理数据源

①加入依赖

<!-- MySQL驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.16</version>
</dependency>
<!-- druid数据源 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.0.31</version>
</dependency>

②创建外部配置文件

<!-- 引入jdbc.properties,之后可以通过${key}的方式访问value -->
<context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
         
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
    <property name="url" value="jdbc:mysql://localhost:3306/test?serverTimeZone=UTC"></property>
    <property name="username" value="root"></property>
    <property name="password" value="root"></property>
    <!-- 在此配置最大连接数等等 -->
</bean>

③测试

@Test
public void testDataSource() throws SQLEXception {
    ApplicationContext ioc = new ClassPathXMLApplicationContext("applicationContext.xml");
    DruidDataSource dataSource = ioc.getBean(DruidDataSource.class);
    System.out.println(dataSource.getConnection);
}

④结果

  • 24
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring框架是一种轻量级的Java开发框架,主要使用依赖注入和面向切面编程等技术来完成应用程序的开发和管理。在Spring框架中,注入Bean是非常重要的一个概念。在XML配置文件中,可以使用以下几种方式来注入Bean: 1. Constructor注入 使用Constructor注入是指在Bean实例化时,通过构造函数(Constructor)注入需要的依赖。在配置文件中使用 <constructor-arg> 标签来配置参数,例如: <bean id="foo" class="com.example.Foo"> <constructor-arg index="0" value="fooValue"/> <constructor-arg index="1" value="barValue"/> </bean> 2. Setter注入 使用Setter注入是指在Bean实例化后,通过Setter方法注入需要的依赖。在配置文件中使用 <property> 标签来配置参数,例如: <bean id="foo" class="com.example.Foo"> <property name="foo" value="fooValue" /> <property name="bar" value="barValue" /> </bean> 3. 静态工厂方法注入 使用静态工厂方法注入是指通过静态工厂方法(static factory method)来实例化Bean,并注入需要的依赖。在配置文件中使用 <bean> 标签的 factory-method 属性来指定工厂方法名称,例如: <bean id="foo" class="com.example.Foo" factory-method="createFoo"> <constructor-arg index="0" value="fooValue"/> <constructor-arg index="1" value="barValue"/> </bean> 4. 实例化工厂方法注入 使用实例化工厂方法注入是指在Bean实例化前,通过实例化工厂方法(factory method)来实例化Bean,并注入需要的依赖。在配置文件中使用 <bean> 标签的 factory-bean 和 factory-method 属性来指定工厂Bean和工厂方法名称,例如: <bean id="fooFactory" class="com.example.FooFactory"/> <bean id="foo" factory-bean="fooFactory" factory-method="createFoo"> <constructor-arg index="0" value="fooValue"/> <constructor-arg index="1" value="barValue"/> </bean>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值