最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

spring的xml方式配置bean全過程

 更新時(shí)間:2026年03月16日 10:05:26   作者:月731  
文章介紹了Spring框架中配置bean的四種情況:無(wú)參構(gòu)造方法、有參構(gòu)造方法、Setter方法和實(shí)現(xiàn)InitializingBean接口,還提到了IOC控制反轉(zhuǎn)、DI依賴注入和AOP面向切面編程是Spring的三大特性

配置bean的4種情況

無(wú)參構(gòu)造

首先定義UserDao,UserDaoImpl,UserService,UserServiceImpl如下

public interface UserDao {
}

public class UserDaoImpl implements UserDao {
}

public interface UserService {
    void normalMethod();
}

public class UserServiceImpl implements UserService, InitializingBean, DisposableBean {

    private UserDao userDao;

    public UserServiceImpl() {
        System.out.println("執(zhí)行UserServiceImpl無(wú)參構(gòu)造方法");
    }

    public UserServiceImpl(String name) {
        System.out.println("執(zhí)行UserServiceImpl有參構(gòu)造方法, name = " + name);
    }

    public void setUserDao(UserDao userDao) {
        System.out.println("自動(dòng)依賴注入,設(shè)置UserDao");
        this.userDao = userDao;
    }

    @Override
    public void afterPropertiesSet() {
        System.out.println("執(zhí)行InitializingBean的afterPropertiesSet");
    }

    public void init() {
        System.out.println("執(zhí)行bean標(biāo)簽定義的初始化方法");
    }

    @Override
    public void normalMethod() {
        System.out.println("執(zhí)行普通業(yè)務(wù)方法");
    }

    @Override
    public void destroy() {
        System.out.println("執(zhí)行DisposableBean的destroy");
    }

    public void myDestroy() {
        System.out.println("執(zhí)行bean標(biāo)簽定義的銷毀方法");
    }
}

實(shí)例化UserDao的方式:

UserDao userDao = new UserDaoImpl();

以無(wú)參構(gòu)造方法配置bean的方式:

<bean id="userDao" class="com.yt.dao.impl.UserDaoImpl"/>

驗(yàn)證

    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        UserDao userDao = (UserDao) context.getBean("userDao");
        System.out.println(userDao);
        // 輸出 com.yt.dao.impl.UserDaoImpl@103f852
    }

有參構(gòu)造

實(shí)例化UserService的方式:

UserService userService = new UserServiceImpl("yt");

以有參構(gòu)造方法配置bean的方式:

<bean id="userService"  class="com.yt.service.impl.UserServiceImpl">
        <constructor-arg name="name" value="yt"/>
</bean>

驗(yàn)證

    public static void main(String[] args) {
       ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        System.out.println(context.getBean("userService"));
        // 輸出
        // 執(zhí)行UserServiceImpl有參構(gòu)造方法, name = yt
        // com.yt.service.impl.UserServiceImpl@179bb86
    }

依賴注入

IOC控制反轉(zhuǎn),DI依賴注入,AOP面向切面編程是spring的三大特性。

配置bean時(shí)想要自動(dòng)注入bean的屬性需要提供:bean要注入的對(duì)象對(duì)應(yīng)的setter方法,被注入的bean,property標(biāo)簽。

    <bean id="userService" class="com.yt.service.impl.UserServiceImpl">
        <constructor-arg name="name" value="yt"/>
        <property name="userDao" ref="userDao"/>
    </bean>
    <bean id="userDao" class="com.yt.dao.impl.UserDaoImpl"/>

驗(yàn)證

    public static void main(String[] args) {
       ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        System.out.println(context.getBean("userService"));
        // 輸出
        // 執(zhí)行UserServiceImpl有參構(gòu)造方法, name = yt
        // 自動(dòng)依賴注入,設(shè)置UserDao
        // com.yt.service.impl.UserServiceImpl@179bb86
    }

bean標(biāo)簽的屬性

<bean id="userService"
          name="aaa,bbb,ccc" // 別名,可起多個(gè),getBean時(shí)可使用別名獲取
          class="com.yt.service.impl.UserServiceImpl"
          scope="prototype" // 默認(rèn)單例singleton,非默認(rèn)原型prototype,即每次獲取bean都是不同的實(shí)例
          lazy-init="true" //懶加載,只在獲取bean時(shí)生成bean,默認(rèn)非懶加載,啟動(dòng)容器就創(chuàng)建bean
          init-method="init" // 指定類里面的一個(gè)方法為初始化方法
          destroy-method="myDestroy"> // 指定類里面的一個(gè)方法為銷毀方法,需要手動(dòng)關(guān)閉容器才可看到執(zhí)行
    </bean>

實(shí)現(xiàn)bean的初始化方法和銷毀方法還有一種方式,實(shí)現(xiàn)InitializingBean, DisposableBean接口。bean標(biāo)簽指定的方法和實(shí)現(xiàn)接口的方法的執(zhí)行順序見運(yùn)行結(jié)果

    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        System.out.println(context.getBean("userService"));
        userService.normalMethod();
        //當(dāng)scope是prototype的時(shí)候,對(duì)象的生存周期spring就不管了。只有在tomcat或者容器關(guān)閉的時(shí)候,由tomcat調(diào)用
        context.close();
    }
// 輸出
// 執(zhí)行UserServiceImpl無(wú)參構(gòu)造方法
// 執(zhí)行InitializingBean的afterPropertiesSet
// 執(zhí)行bean標(biāo)簽定義的初始化方法
// com.yt.service.impl.UserServiceImpl@179bb86
// 執(zhí)行普通業(yè)務(wù)方法

靜態(tài)工廠方法(字太多了,懶得寫了)

    <bean id="userService1" class="com.yt.factory.MyBeanFactory1" factory-method="getUserService"/>

實(shí)例工廠方法

    <bean id="myBeanFactory2" class="com.yt.factory.MyBeanFactory2"/>
    <bean id="userService2" factory-bean="myBeanFactory2" factory-method="getUserService" lazy-init="true"/>

綜合使用

記得導(dǎo)入坐標(biāo),再到mybaits官方文檔的入門里面下一個(gè)xml配置文件模板,改成自己的,記得刪掉mappe標(biāo)簽,因?yàn)闆]寫

我還是貼出來

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/bai"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
</configuration>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.23</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.23</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.49</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.5</version>
        </dependency>

當(dāng)前版本為jdk8

    <!--配置數(shù)據(jù)源-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/bai"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </bean>
    
    <!--配置Connection-->
    <bean id="clazz" class="java.lang.Class" factory-method="forName">
        <constructor-arg name="className" value="com.mysql.jdbc.Driver"/>
    </bean>
    <bean id="connection" class="java.sql.DriverManager" factory-method="getConnection" scope="prototype">
        <constructor-arg name="url" value="jdbc:mysql://localhost:3306/bai"/>
        <constructor-arg name="user" value="root"/>
        <constructor-arg name="password" value="123456"/>
    </bean>
    
    <!--配置一個(gè)當(dāng)前時(shí)間-->
    <bean id="now" class="java.time.LocalDateTime" factory-method="now"/>
    <bean id="dateTimeFormatter" class="java.time.format.DateTimeFormatter" factory-method="ofPattern">
        <constructor-arg name="pattern" value="yyyy-MM-dd HH:mm:ss"/>
    </bean>
    <bean id="nowString" factory-bean="now" factory-method="format">
        <constructor-arg name="formatter" ref="dateTimeFormatter"/>
    </bean>

    <!--配置一個(gè)SqlSessionFactory-->
    <bean id="mybatisConfigInputStream" class="org.apache.ibatis.io.Resources" factory-method="getResourceAsStream">
        <constructor-arg name="resource" value="mybatis-config.xml"/>
    </bean>
    <bean id="sqlSessionFactoryBuild" class="org.apache.ibatis.session.SqlSessionFactoryBuilder"/>
    <bean id="sqlSessionFactory" factory-bean="sqlSessionFactoryBuild" factory-method="build">
        <constructor-arg name="inputStream" ref="mybatisConfigInputStream"/>
    </bean>

驗(yàn)證

public class ThirdPartyBeanTest {
    public static void main(String[] args) throws Exception {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        System.out.println(context.getBean("dataSource"));
        System.out.println(context.getBean("connection"));
        System.out.println(context.getBean("connection"));
        System.out.println(context.getBean("nowString"));
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory sqlSessionFactory = builder.build(is);
        System.out.println(sqlSessionFactory);
        System.out.println(context.getBean("sqlSessionFactory"));
    }
}
// 輸出
{
	CreateTime:"2022-11-10 23:53:05",
	ActiveCount:0,
	PoolingCount:0,
	CreateCount:0,
	DestroyCount:0,
	CloseCount:0,
	ConnectCount:0,
	Connections:[
	]
}
Thu Nov 10 23:53:05 CST 2022 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
com.mysql.jdbc.JDBC4Connection@1af006c
Thu Nov 10 23:53:07 CST 2022 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
com.mysql.jdbc.JDBC4Connection@1d1433e
2022-11-10 23:53:05
org.apache.ibatis.session.defaults.DefaultSqlSessionFactory@46293d
org.apache.ibatis.session.defaults.DefaultSqlSessionFactory@1997e9d

Process finished with exit code 0

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java實(shí)現(xiàn)Http工具類的封裝操作示例

    Java實(shí)現(xiàn)Http工具類的封裝操作示例

    這篇文章主要介紹了Java實(shí)現(xiàn)Http工具類的封裝操作,涉及java針對(duì)http請(qǐng)求與響應(yīng)、遠(yuǎn)程交互與字符串拼接等操作封裝技巧,需要的朋友可以參考下
    2018-01-01
  • 解決java后臺(tái)登錄前后cookie不一致問題

    解決java后臺(tái)登錄前后cookie不一致問題

    本文主要介紹了java后臺(tái)登錄前后cookie不一致的解決方案,具有很好的參考價(jià)值,需要的朋友一起來看下吧
    2016-12-12
  • java實(shí)現(xiàn)酷狗音樂臨時(shí)緩存文件轉(zhuǎn)換為MP3文件的方法

    java實(shí)現(xiàn)酷狗音樂臨時(shí)緩存文件轉(zhuǎn)換為MP3文件的方法

    這篇文章主要介紹了java實(shí)現(xiàn)酷狗音樂臨時(shí)緩存文件轉(zhuǎn)換為MP3文件的方法,涉及java針對(duì)文件操作的相關(guān)技巧,需要的朋友可以參考下
    2016-08-08
  • SpringBoot集成Hera實(shí)現(xiàn)分布式應(yīng)用監(jiān)控與追蹤解決方案

    SpringBoot集成Hera實(shí)現(xiàn)分布式應(yīng)用監(jiān)控與追蹤解決方案

    Hera是一款由美團(tuán)點(diǎn)評(píng)開源的分布式應(yīng)用監(jiān)控與追蹤系統(tǒng),專注于解決微服務(wù)架構(gòu)下的性能監(jiān)控、故障診斷和鏈路追蹤問題,本文給大家介紹了SpringBoot集成Hera實(shí)現(xiàn)分布式應(yīng)用監(jiān)控與追蹤的解決方案,需要的朋友可以參考下
    2026-01-01
  • 使用Java生成和識(shí)別二維碼的簡(jiǎn)易教程

    使用Java生成和識(shí)別二維碼的簡(jiǎn)易教程

    在當(dāng)今瞬息萬(wàn)變的商業(yè)和技術(shù)環(huán)境中,二維碼已成為快速、高效信息傳遞的代名詞,本文將為您介紹 Spire.Barcode for Java 這一強(qiáng)大工具,它能幫助您輕松應(yīng)對(duì)Java應(yīng)用程序中的二維碼生成與識(shí)別挑戰(zhàn),需要的朋友可以參考下
    2025-09-09
  • Mybatis-plus如何開啟二級(jí)緩存

    Mybatis-plus如何開啟二級(jí)緩存

    這篇文章主要介紹了Mybatis-plus如何開啟二級(jí)緩存問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Java web項(xiàng)目啟動(dòng)Tomcat報(bào)錯(cuò)解決方案

    Java web項(xiàng)目啟動(dòng)Tomcat報(bào)錯(cuò)解決方案

    這篇文章主要介紹了Java web項(xiàng)目啟動(dòng)Tomcat報(bào)錯(cuò)解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Java超詳細(xì)分析繼承與重寫的特點(diǎn)

    Java超詳細(xì)分析繼承與重寫的特點(diǎn)

    繼承是Java面向?qū)ο缶幊讨械囊婚T。繼承是子類繼承父類的特征和行為,或者是繼承父類得方法,使的子類具有父類得的特性和行為。重寫是子類對(duì)父類的允許訪問的方法實(shí)行的過程進(jìn)行重新編寫,返回值和形參都不能改變。就是對(duì)原本的父類進(jìn)行重新編寫,但是外部接口不能被重寫
    2022-05-05
  • Java排序的那些事之sort方法的使用詳解

    Java排序的那些事之sort方法的使用詳解

    sort方法用于對(duì)數(shù)組的元素進(jìn)行排序。排序順序可以是字母或數(shù)字,并按升序或降序。默認(rèn)排序順序?yàn)榘醋帜干?,?dāng)數(shù)字是按字母順序排列時(shí)"40"將排在"5"前面。使用數(shù)字排序,你必須通過一個(gè)函數(shù)作為參數(shù)來調(diào)用。這些說起來可能很難理解,你可以通過本篇文章進(jìn)一步了解它
    2021-09-09
  • Java不指定長(zhǎng)度的二維數(shù)組實(shí)例

    Java不指定長(zhǎng)度的二維數(shù)組實(shí)例

    今天小編就為大家分享一篇Java不指定長(zhǎng)度的二維數(shù)組實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07

最新評(píng)論

黔西县| 旬阳县| 阳曲县| 上林县| 苏州市| 绵阳市| 宜昌市| 漠河县| 黎川县| 明水县| 拜泉县| 阿勒泰市| 永昌县| 菏泽市| 濮阳市| 泗阳县| 洛宁县| 友谊县| 祁阳县| 秭归县| 宣武区| 阳高县| 甘孜| 乐清市| 汝城县| 北京市| 武强县| 上犹县| 册亨县| 宝兴县| 岐山县| 宜昌市| 延吉市| 北碚区| 东源县| 仙居县| 肇源县| 西畴县| 尚义县| 冷水江市| 大丰市|