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

spring的xml方式配置bean全過程

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

配置bean的4種情況

無參構(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無參構(gòu)造方法");
    }

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

    public void setUserDao(UserDao userDao) {
        System.out.println("自動依賴注入,設(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)簽定義的銷毀方法");
    }
}

實例化UserDao的方式:

UserDao userDao = new UserDaoImpl();

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

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

驗證

    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)造

實例化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>

驗證

    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時想要自動注入bean的屬性需要提供:bean要注入的對象對應(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"/>

驗證

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

bean標(biāo)簽的屬性

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

實現(xiàn)bean的初始化方法和銷毀方法還有一種方式,實現(xiàn)InitializingBean, DisposableBean接口。bean標(biāo)簽指定的方法和實現(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的時候,對象的生存周期spring就不管了。只有在tomcat或者容器關(guān)閉的時候,由tomcat調(diào)用
        context.close();
    }
// 輸出
// 執(zhí)行UserServiceImpl無參構(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"/>

實例工廠方法

    <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官方文檔的入門里面下一個xml配置文件模板,改成自己的,記得刪掉mappe標(biāo)簽,因為沒寫

我還是貼出來

<?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>
    
    <!--配置一個當(dāng)前時間-->
    <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>

    <!--配置一個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>

驗證

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é)

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

相關(guān)文章

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

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

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

    解決java后臺登錄前后cookie不一致問題

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

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

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

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

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

    使用Java生成和識別二維碼的簡易教程

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

    Mybatis-plus如何開啟二級緩存

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

    Java web項目啟動Tomcat報錯解決方案

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

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

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

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

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

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

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

最新評論

普格县| 洮南市| 永丰县| 金沙县| 信丰县| 宾阳县| 喀什市| 泸水县| 锡林浩特市| 嵩明县| 泽州县| 嵩明县| 正蓝旗| 伽师县| 金门县| 万州区| 固阳县| 长沙市| 东辽县| 儋州市| 云龙县| 手游| 崇左市| 濮阳市| 隆尧县| 西峡县| 丹寨县| 八宿县| 眉山市| 陆丰市| 邵阳县| 旬邑县| 水富县| 邵武市| 馆陶县| 大新县| 海伦市| 治县。| 临江市| 和田市| 青冈县|