日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring框架—SpringBean配置

發布時間:2024/4/15 javascript 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring框架—SpringBean配置 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

一、配置

1、基于XML的配置

2、基于注解的配置

3、基于Java類的配置

二、解析

1、基于XML配置的解析

2、基于注解配置的解析

三、注冊


一、配置

1、基于XML的配置

適用場景:Bean實現類來自第三方類庫,如:DataSource等

<beans><import resource=“resource1.xml” />//導入其他配置文件Bean的定義<import resource=“resource2.xml” /><bean id="userService" class="cn.lovepi.***.UserService" init-method="init" destory-method="destory"> </bean><bean id="message" class="java.lang.String"><constructor-arg index="0" value="test"></constructor-arg></bean></beans>

2、基于注解的配置

適用場景:項目中自己開發使用的類,如controller、service、dao等

步驟如下:

1)在applicationContext.xml配置掃描包路徑

<context:component-scan base-package="com.lovepi.spring">//包含的目標類<context:include-filter type="regex" expression="com.lovepi.spring.*"/>//排除的目標類 <context:exclude-filter type="aspectj" expression="cn.lovepi..*Controller+"/>    </context:component-scan>

2)使用注解聲明bean

Spring提供了四個注解,這些注解的作用與上面的XML定義bean效果一致,在于將組件交給Spring容器管理。組件的名稱默認是類名(首字母變小寫),可以自己修改:

  • @Component:當對組件的層次難以定位的時候使用這個注解
  • @Controller:表示控制層的組件
  • @Service:表示業務邏輯層的組件
  • @Repository:表示數據訪問層的組件
@Service public class SysUserService {@Resourceprivate SysUserMapper sysUserMapper;public int insertSelective(SysUser record){return sysUserMapper.insertSelective(record);}}

3、基于Java類的配置

適用場景:需要通過代碼控制對象創建邏輯的場景,好處是實現零配置,消除xml配置文件

步驟如下:

  • 使用@Configuration注解需要作為配置的類,表示該類將定義Bean的元數據
  • 使用@Bean注解相應的方法,該方法名默認就是Bean的名稱,該方法返回值就是Bean的對象。
  • AnnotationConfigApplicationContext或子類進行加載基于java類的配置
  • @Configuration public class BeansConfiguration { @Bean public Student student(){ Student student=new Student(); student.setName("張三"); student.setTeacher(teacher()); return student; } @Bean public Teacher teacher(){ Teacher teacher=new Teacher(); teacher.setName("李四"); return teacher; } } public class Main { public static void main(String args[]){ AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(BeansConfiguration.class); Student student = (Student) context.getBean("student");Teacher teacher = (Teacher) context.getBean("teacher");System.out.println("學生的姓名:" + student.getName() + "。老師是" + student.getTeacher().getName()); System.out.println("老師的姓名:" + teacher.getName()); } }

    二、解析

    1、基于XML配置的解析

    • BeanDefinitionReader:Bean 相關信息配置完成之后,需要解析資源,BeanDefinitionReader 接口定義了一系列方法來解析和輔助解析資源,XmlBeanDefinitionReader 和 PropertiesBeanDefinitionReader 都是 BeanDefinitionReader 的實現類,用來解析特定資源的。
    • BeanDefinitionParser:XML 解析器

    2、基于注解配置的解析

    • AnnotatedBeanDefinitionReader

    AnnotatedBeanDefinitionReader 與 XmlBeanDefinitionReader 和 PropertiesBeanDefinitionReader 不同,它沒有實現 BeanDefinitionReader 接口,并且 AnnotatedBeanDefinitionReader 這個類注冊和解析在同一類中。這里需要注意一下,雖然這個類可以解析配置類,但是在這個階段并不能解析 @Bean 等配置 Bean 的注解,@Bean 等配置類的注解是在 AbstractApplication 中 refresh 方法中處理的。也就是說 AnnotaedBeanDefinitionReader 是發現 Configclass 的,而 @Bean 注解是在 解析Configclass 內部進行處理的。

    public class AnnotationBeanDefinitionParserDemo {public static void main(String[] args) {// 創建一個 Bean 工廠DefaultListableBeanFactory defaultListableBeanFactory = new DefaultListableBeanFactory();// 創建一個 AnnotatedBeanDefinitionReaderAnnotatedBeanDefinitionReader annotatedBeanDefinitionReader = new AnnotatedBeanDefinitionReader(defaultListableBeanFactory);// 添加一個注冊類annotatedBeanDefinitionReader.register(AnnotationBeanDefinitionParserDemo.class);// 通過依賴查找獲取 Bean 實例AnnotationBeanDefinitionParserDemo bean = defaultListableBeanFactory.getBean(AnnotationBeanDefinitionParserDemo.class);System.out.println("通過 AnnotatedBeanDefinitionReader 元信息配置方式獲取 bean 實例:" + bean);} }

    三、注冊

    spring在啟動時會自己把bean(java組件)注冊到ioc容器里,實現控制反轉,在開發人員使用spring開發應用程序時,你是看不到new關鍵字的,所有對象都應該從容器里獲得,它們的生命周期在放入容器時已經確定!最原始的創建對象的方法就是通過new來實現(手動的編寫代碼實現):而Spring提供了Ioc容器用于對象的創建以及配置、管理、銷毀等。

    package com.rumenz;public class DemoApplication {public static void main(String[] args) {AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext();registerBean(ac,"rumenz");//啟動Spring上下文ac.refresh();//依賴查找Rumenz rumenz = (Rumenz) ac.getBean("rumenz");rumenz.print();//關閉Spring上下文ac.close();}private static void registerBean(BeanDefinitionRegistry reg, String beanName){BeanDefinitionBuilder bd=BeanDefinitionBuilder.genericBeanDefinition(Rumenz.class);reg.registerBeanDefinition(beanName,bd.getBeanDefinition());}}

    ?

    總結

    以上是生活随笔為你收集整理的Spring框架—SpringBean配置的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。