IOC入門代碼 及相關配置詳細解析

1、在IntelliJ IDEA上創建一個工程

在這裏插入圖片描述

2、在pom.xml裏面配置相應的座標,大家可以在Maven官網上獲取相關座標的代碼

Maven官網地址:https://mvnrepository.com
座標解析代碼中說明

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.tx</groupId>
    <artifactId>tx_spring01</artifactId>
    <version>1.0-SNAPSHOT</version>

//<!--    以下是相應座標加載的代碼-->
//    <dependencies>
//        <!--通同過maven傳遞依賴,導入依賴的jar包 -->

//       <!--Context通過繼承獲得了工廠,事件發佈,環境定義,資源加載以及國際化的能力 它的核心方法是refresh :整個容器構建的過程
//       spring-context源碼解析參考:https://blog.csdn.net/szwandcj/article/details/50762990
//       -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.0.2.RELEASE</version>
        </dependency>

//        <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging
//             Logging系統中,從一個LogFactory中取得一個命名的Log(Logger)實例,使用這個Log(Logger)實例打印debug、info、warn、error等不同級別的日誌
//             logging源碼解析參考:https://blog.csdn.net/u011794238/article/details/50749260
//        -->
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>

//        <!-- https://mvnrepository.com/artifact/log4j/log4j
//        Log4j是Apache的一個開源項目,通過使用Log4j可以控制日誌信息輸送的目的地是控制檯、文件、GUI組件、套
//        接口服務器、NT的事件記錄器、UNIX Syslog守護進程等;我們也可以控制每一條日誌的輸出格式;通過定義每一條日誌信息的級
//         別,我們能夠更加細緻地控制日誌的生成過程。這些可以通過一個配置文件來靈活地進行配置,而不需要修改應用的代碼
//        log4j詳細解析:https://blog.csdn.net/u013870094/article/details/79518028-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>

//        <!-- https://mvnrepository.com/artifact/junit/junit
//            JUnit是一個Java語言的單元測試框架,用於編寫和運行可重複的測試
//        -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>


    </dependencies>



</project>
3、在src目錄下的resource裏面導入IDEA中log4j.properties配置文件

在這裏插入圖片描述


### 設置###

log4j.rootLogger = debug,stdout,D,E



### 輸出信息到控制擡 ###

log4j.appender.stdout = org.apache.log4j.ConsoleAppender

log4j.appender.stdout.Target = System.out

log4j.appender.stdout.layout = org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n



### 輸出DEBUG 級別以上的日誌到=D://logs/error.log ###

log4j.appender.D = org.apache.log4j.DailyRollingFileAppender

log4j.appender.D.File = D://logs/log.log

log4j.appender.D.Append = true

log4j.appender.D.Threshold = DEBUG 

log4j.appender.D.layout = org.apache.log4j.PatternLayout

log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n



### 輸出ERROR 級別以上的日誌到=D://logs/error.log ###

log4j.appender.E = org.apache.log4j.DailyRollingFileAppender

log4j.appender.E.File =D://logs/error.log 

log4j.appender.E.Append = true

log4j.appender.E.Threshold = ERROR 

log4j.appender.E.layout = org.apache.log4j.PatternLayout

log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

其中 [ level ] 是日誌輸出級別:ERROR、WARN、INFO、DEBUG

ERROR 爲嚴重錯誤 主要是程序的錯誤

WARN 爲一般警告,比如session丟失

INFO 爲一般要顯示的信息,比如登錄登出

DEBUG 爲程序的調試信息

appenderName是日誌輸出位置的配置的命名

log4j.appender.appenderName = fully.qualified.name.of.appender.class中fully.qualified.name.of.appender.class應換上以下信息輸出的目的地:
org.apache.log4j.ConsoleAppender(控制檯)

org.apache.log4j.FileAppender(文件)

org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌文件)

org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)

org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)
appender.appenderName.layout = fully.log4j.qualified.name.of.layout.class中fully.qualified.name.of.layout.class格式佈局應換上以下信息:

org.apache.log4j.HTMLLayout(以HTML表格形式佈局)

org.apache.log4j.PatternLayout(可以靈活地指定佈局模式)

org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串)

org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息)

log4j.appender.appenderName.option中option應替換的屬性/選項
1.ConsoleAppender控制檯選項
Threshold=DEBUG:指定日誌消息的輸出最低層次。

ImmediateFlush=true:默認值是true,意味着所有的消息都會被立即輸出。

Target=System.err:默認情況下是:System.out,指定輸出控制檯
2.FileAppender 文件選項
Threshold=DEBUF:指定日誌消息的輸出最低層次。

ImmediateFlush=true:默認值是true,意謂着所有的消息都會被立即輸出。

File=mylog.txt:指定消息輸出到mylog.txt文件。

Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。
3.RollingFileAppender 每天生成一個文件選項
Threshold=DEBUG:指定日誌消息的輸出最低層次。

ImmediateFlush=true:默認值是true,意謂着所有的消息都會被立即輸出。

File=mylog.txt:指定消息輸出到mylog.txt文件。

Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。

MaxFileSize=100KB: 後綴可以是KB, MB 或者是 GB. 在日誌文件到達該大小時,將會自動滾動,即將原來的內容移到mylog.log.1文件。

MaxBackupIndex=2:指定可以產生的滾動文件的最大數。
    ConversionPattern 日誌信息,符號所代表的含義:
-X號: X信息輸出時左對齊;

%p: 輸出日誌信息優先級,即DEBUG,INFO,WARN,ERROR,FATAL,

%d: 輸出日誌時間點的日期或時間,默認格式爲ISO8601,也可以在其後指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921

%r: 輸出自應用啓動到輸出該log信息耗費的毫秒數

%c: 輸出日誌信息所屬的類目,通常就是所在類的全名

%t: 輸出產生該日誌事件的線程名

%l: 輸出日誌事件的發生位置,相當於%C.%M(%F:%L)的組合,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main (TestLog4.java:10)

%x: 輸出和當前線程相關聯的NDC(嵌套診斷環境),尤其用到像java servlets這樣的多客戶多線程的應用中。

%%: 輸出一個"%“字符

%F: 輸出日誌消息產生時所在的文件名稱

%L: 輸出代碼中的行號

%m: 輸出代碼中指定的消息,產生的日誌具體信息

%n: 輸出一個回車換行符,Windows平臺爲”\r\n",Unix平臺爲"\n"輸出日誌信息換行

可以在%與模式字符之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式。如:

1)%20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小於20的話,默認的情況下右對齊。

2)%-20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小於20的話,"-"號指定左對齊。

3)%.30c:指定輸出category的名稱,最大的寬度是30,如果category的名稱大於30的話,就會將左邊多出的字符截掉,但小於30的話也不會有空格。

4)%20.30c:如果category的名稱小於20就補空格,並且右對齊,如果其名稱長於30字符,就從左邊較遠輸出的字符截掉。

以上我們就把座標配置好了

4、配置好座標,我們現在來創建一個接口和實現類
在這裏插入圖片描述
接口:

package cn.tx.service;

public interface UserService {
    public void hello();
}

實現類:

package cn.tx.service;

public class UserServiceImpl implements UserService{

    public void hello() {
        System.out.println("Hello IOC");
    }
}
5、按照傳統方法,我們直接用來調用,現在選創建一個Demo1類來測試運行

在這裏插入圖片描述
傳統方法:

/*以前的方式*/
@Test
public  void run1(){
    //new 對象方式,對象的創建權利由我們控制
    UserService userService=new UserServiceImpl();
    //調用方法
    userService.hello();
}

現在我們要使用IOC方式來實現調用,那就得在resources裏面配置一個IOC容器,容器得名稱可以隨取,一般是用appricationContext
在這裏插入圖片描述
配置IOC容器 appricationContext代碼

<?xml version="1.0" encoding="UTF-8"?>
<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">

<!-- 把UserServiceImpl類交給IOC容器進行管理,對象由IOC容器來創建  bean管理 組件管理
    id="對象在IOC容器中唯一的名稱,要求編寫的時候是唯一的"
    class=“管理的類的全路徑(包名+類名),通過java反射技術創建實例對象”
 -->
    <bean id="us" class="cn.tx.service.UserServiceImpl"/>

</beans>
6、配置好IOC容器,我們現在回到Demo1中使用IOC方式來調用方法實現
/*使用IOC方式*/
    @Test
    public  void run2(){
       //創建spring的IOC的工廠,加載src目錄下的配置文件,把配置文件中創建成對象,存儲到IOC容器中。
        ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
        //從容器中獲取對象就ok. Map<"us",對象>
       UserService us= (UserService) ac.getBean("us");
        //調用對象方法即可
        us.hello();
    }

運行結果:
在這裏插入圖片描述

IOC入門代碼就寫完了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章