欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

五分鐘帶你快速學(xué)習(xí)Spring?IOC

 更新時(shí)間:2022年03月15日 14:27:11   作者:步爾斯特  
這篇文章主要給大家介紹了關(guān)于如何通過五分鐘快速學(xué)習(xí)Spring?IOC的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

Inversion of Control“控制反轉(zhuǎn)”

降低代碼之間的耦合度

其中最常見的的方式叫做依賴注入簡(jiǎn)稱DI

??什么是ioc

不是技術(shù),而是一種設(shè)計(jì)思想。在Java開發(fā)中,IOC意味著將你設(shè)計(jì)好的對(duì)象交給容器控制,而不是傳統(tǒng)的在你的對(duì)象內(nèi)部直接控制。把對(duì)象創(chuàng)建和對(duì)象之間的調(diào)用交給Spring管理。

??可控制反轉(zhuǎn)是什么意思呢?

誰控制誰?

控制什么?

為何是反轉(zhuǎn)(有反轉(zhuǎn)就應(yīng)該有正轉(zhuǎn)了),哪些方面反轉(zhuǎn)了?什么又是在正轉(zhuǎn)呢?

  • 誰控制誰,控制什么:一般來說,我們直接在對(duì)象內(nèi)部通過new進(jìn)行創(chuàng)建對(duì)象,是程序主動(dòng)去創(chuàng)建依賴對(duì)象;而IOC是有專門一個(gè)容器來創(chuàng)建這些對(duì)象,即由IOC容器來控制對(duì)象的創(chuàng)建;

誰控制誰?是IOC容器控制了對(duì)象;

控制什么?那就是主要控制了外部資源獲?。ú恢皇菍?duì)象包括比如文件等)

  • 為何是反轉(zhuǎn),哪些方面反轉(zhuǎn)了:有反轉(zhuǎn)就有正轉(zhuǎn),傳統(tǒng)應(yīng)用程序是由我們自己在對(duì)象中主動(dòng)控制去直接獲取依賴對(duì)象,也就是正轉(zhuǎn);而反轉(zhuǎn)則是由容器來幫忙創(chuàng)建及注入依賴對(duì)象;

為何是反轉(zhuǎn)?因?yàn)橛扇萜鲙臀覀儾檎壹白⑷胍蕾噷?duì)象,對(duì)象只是被動(dòng)的接受依賴對(duì)象,所以是反轉(zhuǎn)

哪些方面反轉(zhuǎn)了?依賴對(duì)象的獲取被反轉(zhuǎn)了。(主動(dòng)變被動(dòng))

??使用IOC的目的:為了降低耦合度

一、IOC底層原理:

xml 工廠模式 反射

工廠模式,仍是存在耦合度的,進(jìn)一步解耦

讓耦合度降低到最低----IOC

1、IOC過程

第一步:xml配置文件 ,配置創(chuàng)建的對(duì)象

<bean id="dao" class= "com.yer.UserDao"></bean>

第二步 有dao 類 和service類,創(chuàng)建工廠類

class UserFactory{
    public static UserDao  getDao(){
        String classValue = class屬性值 //1.由xml解析
        Class clazz = Class.forName(classValue)//2.通過反射創(chuàng)建
        return (UserDao)clazz.newInstance();
        
    }
}

2、IOC接口

?? ioc思想基于ioc容器完成,ioc容器就是對(duì)象工廠

??Spring提供ioc容器實(shí)現(xiàn)兩種方式(兩個(gè)接口)

  • BeanFactory :Ioc容器基本實(shí)現(xiàn),是Spring內(nèi)部的使用接口,不提供開發(fā)人員進(jìn)行使用

*加載配置文件的時(shí)候不回去創(chuàng)建對(duì)象,在使用對(duì)象的時(shí)候才回去創(chuàng)建對(duì)象

  • AppplicationContext:BeanFactory的子接口,提供更多更強(qiáng)大功能,一般由開發(fā)人員使用

*加載配置文件的時(shí)候就會(huì)把配置文件對(duì)象創(chuàng)建

在耗時(shí)耗資源的過程在服務(wù)器啟動(dòng)的時(shí)候就完成–verygood!

ApplicationContext接口有實(shí)現(xiàn)類:

ClassPathXmlApplicationContext
實(shí)際開發(fā)中都是讀取類路徑,
它是用于讀取類路徑下的配置文件

FileSystemXmlApplicationContext 它是用于讀取系統(tǒng)文件目錄中的配置文件

二、ioc容器 bean管理xml方式(創(chuàng)建對(duì)象和set注入)

??什么是bean管理?

指的是兩個(gè)操作

  • 創(chuàng)建對(duì)象
  • 注入屬性

??bean 管理操作有兩種方式

  • 基于xml配置文件方式實(shí)現(xiàn)
  • 基于注解實(shí)現(xiàn)方式實(shí)現(xiàn)

三、ioc操作bean管理(基于xml方式)

??基于xml方式創(chuàng)建對(duì)象

<bean id="user" class="com.yer.spring5.User"></bean>

在spring配置文件中使用bean標(biāo)簽,標(biāo)簽里面可以添加對(duì)應(yīng)屬性,就可以實(shí)現(xiàn)對(duì)象的創(chuàng)建

在bean標(biāo)簽中有很多屬性:

  • id:唯一標(biāo)識(shí)
  • class:類全路徑

創(chuàng)建對(duì)象的也是默認(rèn)執(zhí)行無參構(gòu)造方法

??基于xml方式注入屬性

DI依賴注入 ,就是注入屬性

先創(chuàng)建對(duì)象 再注入屬性

什么是DI?

DI—Dependency Injection“依賴注入”

是組件之間依賴關(guān)系由容器在運(yùn)行期決定,形象的說,即由容器動(dòng)態(tài)的將某個(gè)依賴關(guān)系注入到組件之中。

依賴注入的目的并非為軟件系統(tǒng)帶來更多功能,而是為了提升組件重用的頻率,并為系統(tǒng)搭建一個(gè)靈活、可擴(kuò)展的平臺(tái)通過依賴注入機(jī)制,我們只需要通過簡(jiǎn)單的配置,而無需任何代碼就可指定目標(biāo)需要的資源,完成自身的業(yè)務(wù)邏輯,而不需要關(guān)心具體的資源來自何處,由誰實(shí)現(xiàn)。

理解DI的關(guān)鍵是:“誰依賴誰,為什么需要依賴,誰注入誰,注入了什么”,那我們來深入分析一下:

  • 誰依賴于誰:當(dāng)然是應(yīng)用程序依賴于IOC容器
  • 為什么需要依賴:應(yīng)用程序需要IOC容器來提供對(duì)象需要的外部資源
  • 誰注入誰:很明顯是IOC容器注入給應(yīng)用程序 某個(gè)對(duì)象,應(yīng)用程序依賴的對(duì)象(IOC容器把應(yīng)用
     程序所依賴的對(duì)象注入進(jìn)應(yīng)用程序中)
  • 注入了什么:就是注入某個(gè)對(duì)象所需要的外部資源(包括對(duì)象、資源、常量數(shù)據(jù))。

?? 第一種注入方式:使用set方法進(jìn)行注入

(1)創(chuàng)建類,定義屬性和對(duì)應(yīng)的set方法

(2)在spring配置文件配置對(duì)象創(chuàng)建配置屬性注入

<bean id="book" class="com.yer.spring5.Book">
    <property name="bname" value="java一學(xué)就會(huì)"></property>
    <property name="bname" value="mysql一學(xué)就會(huì)"></property>
</bean>

?? 第二種注入方式:使用有參構(gòu)造進(jìn)行注入

(1)創(chuàng)建類:定義屬性,創(chuàng)建屬性對(duì)應(yīng)有參構(gòu)造方法

(2)在spring配置文件中進(jìn)行配置

//有參數(shù)構(gòu)造注入屬性
<bean id="oders" class="com.yer.spring5.Orders">
        <constructor-arg name="oname" value="小可愛"></constructor-arg>
        <constructor-arg name="address" value="中國(guó)"></constructor-arg>
</bean>

??p名稱空間注入(了解)

使用p名稱空間注入可以簡(jiǎn)化基于xml配置方式

第一步:添加p名稱空間在配置文件中

xmlns:p="http://www.springframework.org/schema/p"

第二步:進(jìn)行屬性注入,在bean標(biāo)簽里面進(jìn)行操作

<bean id="book" calss="com.yer.spring.Book" p:bname="" p:bauthor=""></bean>

實(shí)體類中必須有set方法;

實(shí)體類中必須有無參構(gòu)造器(默認(rèn)存在);

四、IOC操作Bean管理(xml注入其他類型屬性)

??字面量

(1)null值

<property name="address">
       <null/>
</property>

(2)屬性值包含特殊符號(hào)

<property name="address">
     <value><![CDATA[<<北京>>]]></value>
</property>

五、IOC操作Bean管理(注入屬性- 外部bean ,內(nèi)部bean,級(jí)聯(lián))

1、通過service去調(diào)用dao —引入外部bean

public class UserService {
    
    
    //創(chuàng)建UserDao類型屬性,生成set方法
    private UserDao userDao;
    
    public void setUserDao(UsesrDao userDao){
        this.userDao = userDao;
        
    }
    public void add(){
        System.out.println("sevice add......")
            //原始方式創(chuàng)建UserDao對(duì)象
            //UserDao userDao = new UserDaoImpl();
            //userDao.update();
    }
}

bean.xml

<bean id="userservice" class="com.yer.spring5.service.UserService">
    //注入userDao對(duì)象
    //name屬性:類里面屬性名稱
    //ref屬性:創(chuàng)建userDao對(duì)象bean標(biāo)簽id值 ---userDapImpl
    <property id="userDao" ref="userDapImpl"></property>

</bean>

<bean id="userDaoImpl" class="com.yer.spring5.service.UserDaoImpl">
</bean>

用ref 外部bean 注入進(jìn)來

2、內(nèi)部bean ------ 一對(duì)多 (部門 和 員工)

  <bean id="emp" class="com.yer.spring5.bean.Emp">
        <!-- 設(shè)置兩個(gè)普通屬性-->
      <property name="ename" value="西西"></property>
      <property name="eage" value="18"></property>
         <!-- 設(shè)置對(duì)象類型屬性-->
      <property name="dept" >
          <bean id="dept" class="com.yer.spring5.Dept">
              <property name="dname" value="金融部"></property>
          </bean>
      </property>

  </bean>

property中寫bean

3、 級(jí)聯(lián)賦值

第一種

    <!--級(jí)聯(lián)賦值-->
    <bean id="emp" class="com.yer.spring5.bean.Emp">
        <!--     設(shè)置兩個(gè)普通屬性-->
        <property name="ename" value="西西"></property>
        <property name="eage" value="18"></property>
        <!--級(jí)聯(lián)賦值-->
        <property name="dept" ref="dept"></property>
    </bean>
    <bean id="dept" class="com.yer.spring5.Dept">
        <property name="dname" value="金融部"></property>
    </bean>

相比外部 有屬性

    <!--級(jí)聯(lián)賦值-->
    <bean id="emp" class="com.yer.spring5.bean.Emp">
        <!--     設(shè)置兩個(gè)普通屬性-->
        <property name="ename" value="西西"></property>
        <property name="eage" value="18"></property>
        <!--級(jí)聯(lián)賦值-->
        <property name="dept" ref="dept"></property>
        <property name="dept.dname" value="技術(shù)部"></property>
    </bean>
    <bean id="dept" class="com.yer.spring5.Dept">
        <property name="dname" value="金融部"></property>
    </bean>
    <!--得到dept的dname屬性 ,我們要生成get方法 -->

如果沒有g(shù)et方法會(huì)報(bào)紅的(dept.name)

創(chuàng)建對(duì)象,get拿到屬性才能賦值

六、IOC操作Bean管理(xml 注入集合屬性)

?? 注入數(shù)組類型屬性

 <!--數(shù)組類型屬性注入-->
        <property name="courses">
            <array>
                <value>java</value>
                <value>mysql</value>
            </array>
        </property>

??List集合

  <!--list類型屬性注入-->
        <property name="list">
            <list>
                <value>三三</value>
                <value>四四</value>
            </list>
        </property>

??Map集合

        <!--map類型屬性注入-->
        <property name="maps">
            <map>
                <entry key="JAVA" value="java-map"/>
                <entry key="myBatis" value="myBatis-map"/>
            </map>
        </property>

??set類型

        <!--set類型屬性注入-->
        <property name="sets">
            <set>
                <value>mysql</value>
                <value>redis</value>
            </set>
        </property>

通過ref 標(biāo)簽的 bean 可以創(chuàng)建對(duì)象

集合中可以是一個(gè)個(gè)的對(duì)象

??把集合注入部分提取出來

1.在spring配置中引入命名空間util

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
     http://www.springframework.org/schema/util
     http://www.springframework.org/schema/util/spring-util-4.1.xsd">
</beans>

使用util:list

    <!--1、提取list集合類型屬性注入-->
    <util:list id="bookList">
        <value>java</value>
        <value>python</value>
        <value>mysql</value>
    </util:list>
    
    <!--2、提取list集合類型屬性注入-->
    <bean id="book" class="com.yer.spring5.Book">
        <property name="list" ref="bookList"/>
    </bean>

七、IOC 操作 Bean管理 (FactoryBean)

** spring中有兩種bean ,一種普通bean,一種工廠bean**

??普通bean :在配置文件中定義的bean類型就是返回的類型

??工廠bean:在配置文件定義的bean類型和返回的類型可以不一樣

第一步,創(chuàng)建一個(gè)類,讓這個(gè)類作為工廠bean,實(shí)現(xiàn)接口FactoryBean

第二步,實(shí)現(xiàn)接口,在實(shí)現(xiàn)的方法中定義返回的bean類型

(總結(jié)一下FactoryBean和BeanFactory 待更新…)

八、IOC 操作 Bean管理 (bean 作用域)

  • singleton(單實(shí)例):默認(rèn),每個(gè)容器中只有一個(gè)bean的實(shí)例,單例的模式由BeanFactory自身來維護(hù)。
  • prototype(多實(shí)例):為每一個(gè)bean請(qǐng)求提供一個(gè)實(shí)例。
  • request:為每一個(gè)網(wǎng)絡(luò)請(qǐng)求創(chuàng)建一個(gè)實(shí)例,在請(qǐng)求完成以后,bean會(huì)失效并被垃圾回收器回 收。
  • session:與request范圍類似,確保每個(gè)session中有一個(gè)bean的實(shí)例,在session過期后, bean會(huì)隨之失效
  • global-session:全局作用域,global-session和Portlet應(yīng)用相關(guān)。當(dāng)你的應(yīng)用部署在Portlet 容器中工作時(shí),它包含很多portlet。如果你想要聲明讓所有的portlet共用全局的存儲(chǔ)變量的話,那 么這全局變量需要存儲(chǔ)在global-session中。全局作用域與Servlet中的session作用域效果相同。

??在spring中,可以設(shè)置創(chuàng)建的bean是單實(shí)例還是多實(shí)例,如何設(shè)置單實(shí)例還是多實(shí)例?

在spring配置文件bean標(biāo)簽中,有屬性(scope)用于設(shè)置單/多實(shí)例

scope屬性值:

默認(rèn)值singleton 表示單實(shí)例對(duì)象

prototype ,表示多實(shí)例對(duì)象

<bean id= "book" class="com.yer.spring5-1.Book" scope="prototype">
    <property name="list" ref="bookList"></property>
</bean>

?? singleton 和prototype的區(qū)別

  1. singleton單實(shí)例,prototype多實(shí)例
  2. 設(shè)置scope值是singleton的時(shí)候,加載spring配置文件的時(shí)候就會(huì)創(chuàng)建單實(shí)例對(duì)象為prototype時(shí),是在調(diào)用getBean方法的時(shí)候創(chuàng)建多實(shí)例對(duì)象,而不是在加載spring配置文件時(shí)

九、IOC 操作 Bean管理 (bean 生命周期)

首先說一下Servlet的生命周期:實(shí)例化,初始init,接收請(qǐng)求service,銷毀destroy;

Spring上下文中的Bean生命周期也類似

生命周期:從對(duì)象創(chuàng)建到對(duì)象銷毀的過程

bean 生命周期

  1. 創(chuàng)建bean實(shí)例,通過構(gòu)造器創(chuàng)建bean實(shí)例(無參數(shù)構(gòu)造)
  2. 為bean中相關(guān)屬性設(shè)置值,和對(duì)其他bean的引用(調(diào)用set方法)
  3. 調(diào)用bean的初始化方法(需要進(jìn)行配置初始化的方法)
  4. bean可以使用了(對(duì)象獲取到,可以使用)
  5. 當(dāng)容器關(guān)閉的時(shí)候,調(diào)用bean的銷毀方法(需要進(jìn)行配置銷毀的方法)

init-method 調(diào)初始化方法

destory 銷毀方法

除了這五步還有兩步 bean 的后置處理器

在3的初始化之前 和初始化之后

把bean的實(shí)例傳遞給bean后置處理器的方法

BeanPostProcessor 接口中有兩個(gè)方法

在第三步之前 在初始化之前 postProcessBeforeInitialization

在第三步之后 初始化之后 postProcessAfterInitialization

手動(dòng)銷毀 調(diào)用銷毀方法

生命周期七步

十、IOC 操作 Bean管理 (xml 自動(dòng)裝配)

什么是自動(dòng)裝配:根據(jù)指定裝配規(guī)則

bean標(biāo)簽屬性autowire,配置自動(dòng)裝配

<bean id="emp" class="ocom.yer.spring5-1.Emp" autowire="byType">
</bean>

autowire 屬性通常用兩個(gè)值

byType 根據(jù)屬性類型

byName 根據(jù)屬性名稱

十一、IOC 操作bean管理(外部屬性文件)

1、直接配置數(shù)據(jù)庫(kù)信息

配置德魯伊連接池

2、引入外部屬性文件配置數(shù)據(jù)庫(kù)

3、創(chuàng)建外部屬性文件 properties 文件

把外部properties屬性文件引入到spring配置文件中

引入命名空間context

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
             http://www.springframework.org/schema/contexthttp://www.springframewor .org/schema/context/spring-context.xsd">

</bean>

十二、IOC 操作bean管理(基于注解管理)

1、什么是注解

(1) 注解是代碼特殊標(biāo)記,格式:@注解名稱(屬性名稱=屬性值,屬性名稱=屬性值)

(2)注解在什么地方用呢? 注解作用在: 類 屬性 方法

(3)使用注解目的:簡(jiǎn)化xml配置

2、在spring中針對(duì)bean管理 中 創(chuàng)建對(duì)象提供注解四個(gè)

  • @Component
  • @Service
  • Controller
  • Repository

四個(gè)注解功能都一樣,都可以用來創(chuàng)建bean實(shí)例

3、基于注解方式實(shí)現(xiàn)對(duì)象創(chuàng)建

第一步:引入依賴 aop

第二步:開啟組件掃描

第三步:創(chuàng)建類,在類上面添加創(chuàng)建對(duì)象注解

? 注解中vaule屬性值可以省略不寫 默認(rèn)是類名稱的首字母小寫 UserService-userService

注解原理是與aop有關(guān)—重點(diǎn)

開啟組件掃描

如果掃描多個(gè)包,使用逗號(hào)隔開

要記得掃描包的上層目錄

<context:component-scan base-package="con.yer"></context:component-scan>

首先加載配置文件 bean.xml

bean.xml 中只有一段代碼,開啟注解掃描

發(fā)現(xiàn)了相關(guān)注解@Component (可默認(rèn)為類名首字母小寫)

4、開啟組件掃描細(xì)節(jié)配置

<!--示例1:
use-default-filters="flase"表示現(xiàn)在不是用默認(rèn)filter,自己配置filter
context:include-filter,設(shè)置去掃描哪些內(nèi)容-->
<context:component-scan base-package="con.yer" use-default-filters="flase">
    <context:include-filter type="annotation"
                            expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

<!--示例2:掃描所有內(nèi)容 context:exclude-filter:設(shè)置哪些內(nèi)容不進(jìn)行掃描-->
<context:component-scan base-package="con.yer" >
    <context:exclude-filter type="annotation"
              expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

5、基于注解方式實(shí)現(xiàn)屬性注入

(1)@Autowired:根據(jù)屬性類型自動(dòng)進(jìn)行裝配

(2)@Qualifier:根據(jù)屬性名稱

(3)@Resource: 可以根據(jù)類型,可以根據(jù)名稱

(4)@Value:注入普通類型屬性

@Autowired :根據(jù)屬性類型進(jìn)行自動(dòng)裝配

第一步,把service和dao的對(duì)象進(jìn)行創(chuàng)建,在service和dao類添加創(chuàng)建對(duì)象注解

package com.yer.dao;

public interface UserDao {
    void add();
}

package com.yer.dao;
import org.springframework.stereotype.Repository;

@Repository
public class UserDaoImpl implements UserDao{
    @Override
    public void add() {
        System.out.println("UserDaoImpl add...");
    }
}
package com.yer.sevice;
import com.yer.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    //定義dao類型屬性
    //不需要添加set方法
    //添加注入屬性注解
    @Autowired
    private UserDao userDao;

    public  void add(){
        System.out.println("UserService add....");
        userDao.add();
    }
}
<context:conponent-scan base-package="com.yer"></context:conponent-scan>

@Qualifier :根據(jù)名稱注入

@Qualifier 的使用是與@Autowired一起使用

@Resource 根據(jù)類型注入

@Resource(name="userDaoImpl22")
    private UserDao userDao;
    public  void add(){
        System.out.println("UserService add....");
        userDao.add();
    }
}
@Repository(value="userDaoImpl22")
public class UserDaoImpl implements UserDao{
    @Override
    public void add() {
        System.out.println("UserDaoImpl add");
    }
}

@Resource是 javax.annotation.Resource包下的

@Value( value="月月")
private String name;

完全注解開發(fā)

(1)創(chuàng)建配置類,代替xml配置文件

package com.yer.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
 * @author Darling
 * @create 2022-02-28-16:58
 */
@Configuration //作為配置類,代替xml文件
@ComponentScan(basePackages = {"com.yer"})
public class SpringConfig {
}

package com.yer.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
 * @author Darling
 * @create 2022-02-28-16:58
 */
@Configuration //作為配置類,代替xml文件
@ComponentScan(basePackages = {"com.yer"})//掃描包
public class SpringConfig {
}

(2)編寫測(cè)試類

package com.yer.testdemo;
import com.yer.config.SpringConfig;
import com.yer.sevice.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.testng.annotations.Test;
/**
 * @author Darling
 * @create 2022-02-28-16:20
 */
public class TestSpring5 {
    @Test
    public void testService(){
        ApplicationContext context =
//                new ClassPathXmlApplicationContext("bean.xml");
         new AnnotationConfigApplicationContext(SpringConfig.class);
        UserService userService =   
            context.getBean("userService",UserService.class);
        System.out.println(userService);
        userService.add();
    }
}

SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

報(bào)錯(cuò)了

http://www.dbjr.com.cn/article/240898.htm

官網(wǎng)給出的解決思路如下:

This error is reported when the org.slf4j.impl.StaticLoggerBinder class could not be loaded into memory. This happens when no appropriate SLF4J binding could be found on the class path. Placing one (and only one) of slf4j-nop.jar, slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar or logback-classic.jar on the class path should solve the problem.

翻譯成漢語如下(我是直接英漢互譯翻譯過來的):

此錯(cuò)誤在組織slf4j.inf.strestcoperbinder類無法裝入內(nèi)存時(shí)報(bào)告。當(dāng)在類路徑上找不到合適的slf4j綁定時(shí),就會(huì)發(fā)生這種情況。slf4j-nop.jar放置一個(gè)(且只有一個(gè)), slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar 或 logback-classic.jar 的類路徑應(yīng)該解決這個(gè)問題。

解決方案:

在Maven工程的pom文件中,新增一個(gè)上述的包文件之一的依賴配置,項(xiàng)目就可以正常編譯運(yùn)行了。

<dependency>  
  <groupId>org.slf4j</groupId> 
  <artifactId>slf4j-nop</artifactId> 
  <version>1.7.2</version> 
</dependency>

SLF4J binding could be found on the class path. Placing one (and only one) of slf4j-nop.jar, slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar or logback-classic.jar on the class path should solve the problem.

翻譯成漢語如下(我是直接英漢互譯翻譯過來的):

此錯(cuò)誤在組織slf4j.inf.strestcoperbinder類無法裝入內(nèi)存時(shí)報(bào)告。當(dāng)在類路徑上找不到合適的slf4j綁定時(shí),就會(huì)發(fā)生這種情況。slf4j-nop.jar放置一個(gè)(且只有一個(gè)), slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar 或 logback-classic.jar 的類路徑應(yīng)該解決這個(gè)問題。

解決方案:

在Maven工程的pom文件中,新增一個(gè)上述的包文件之一的依賴配置,項(xiàng)目就可以正常編譯運(yùn)行了。

<dependency>  
  <groupId>org.slf4j</groupId> 
  <artifactId>slf4j-nop</artifactId> 
  <version>1.7.2</version> 
</dependency>

總結(jié)

到此這篇關(guān)于學(xué)習(xí)Spring IOC的文章就介紹到這了,更多相關(guān)學(xué)習(xí)Spring IOC內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一分鐘了解Java中List集合與set集合的多種遍歷方式

    一分鐘了解Java中List集合與set集合的多種遍歷方式

    這篇文章主要介紹了一分鐘了解Java中List集合與set集合的多種遍歷方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Mybatis實(shí)戰(zhàn)之TypeHandler高級(jí)進(jìn)階

    Mybatis實(shí)戰(zhàn)之TypeHandler高級(jí)進(jìn)階

    本文主要介紹了自定義的枚舉TypeHandler的相關(guān)知識(shí),具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • 基于Feign使用okhttp的填坑之旅

    基于Feign使用okhttp的填坑之旅

    這篇文章主要介紹了基于Feign使用okhttp的填坑之旅,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Java中對(duì)list map根據(jù)map某個(gè)key值進(jìn)行排序的方法

    Java中對(duì)list map根據(jù)map某個(gè)key值進(jìn)行排序的方法

    今天小編就為大家分享一篇Java中對(duì)list map根據(jù)map某個(gè)key值進(jìn)行排序的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • spring 定時(shí)任務(wù)@Scheduled詳解

    spring 定時(shí)任務(wù)@Scheduled詳解

    這篇文章主要介紹了spring 定時(shí)任務(wù)@Scheduled的相關(guān)資料,文中通過示例代碼介紹的很詳細(xì),相信對(duì)大家的理解和學(xué)習(xí)具有一定的參考借鑒價(jià)值,有需要的朋友們下面來一起看看吧。
    2017-01-01
  • java學(xué)生信息管理系統(tǒng)設(shè)計(jì)

    java學(xué)生信息管理系統(tǒng)設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了java學(xué)生信息管理系統(tǒng)設(shè)計(jì),學(xué)生信息添加進(jìn)入數(shù)據(jù)庫(kù)的事務(wù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • idea 安裝 Mybatis 開發(fā)幫助插件 MyBatisCodeHelper-Pro 插件破解版的方法

    idea 安裝 Mybatis 開發(fā)幫助插件 MyBatisCodeHelper-Pro 插件破解版的方法

    MyBatisCodeHelper-Pro 插件可以幫助我們快速的開發(fā) mybatis,這篇文章給大家介紹idea 安裝 Mybatis 開發(fā)幫助插件 MyBatisCodeHelper-Pro 插件破解版的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧
    2020-09-09
  • springboot中nacos-client獲取配置的實(shí)現(xiàn)方法

    springboot中nacos-client獲取配置的實(shí)現(xiàn)方法

    本文主要介紹了springboot中nacos-client獲取配置的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Java實(shí)現(xiàn)FutureTask的示例詳解

    Java實(shí)現(xiàn)FutureTask的示例詳解

    在并發(fā)編程當(dāng)中我們最常見的需求就是啟動(dòng)一個(gè)線程執(zhí)行一個(gè)函數(shù)去完成我們的需求,而在這種需求當(dāng)中,我們需要函數(shù)有返回值。Java給我們提供了這種機(jī)制,去實(shí)現(xiàn)這一個(gè)效果:FutureTask。本文為大家準(zhǔn)備了Java實(shí)現(xiàn)FutureTask的示例代碼,需要的可以參考一下
    2022-08-08
  • 深入淺析Spring 中的Null-Safety

    深入淺析Spring 中的Null-Safety

    Spring Framework 本身利用了上面這幾個(gè)注釋,但它們也可以運(yùn)用在任何基于Spring的Java 項(xiàng)目中,以聲明空安全api 和 空安全字段。這篇文章主要介紹了Spring 中的Null-Safety相關(guān)知識(shí) ,需要的朋友可以參考下
    2019-06-06

最新評(píng)論