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

Spring中管理bean對象的方式(專業(yè)級說明)

 更新時間:2025年06月04日 11:15:32   作者:萌新下岸多多關照  
在Spring框架中,Bean的管理是核心功能,主要通過IoC(控制反轉(zhuǎn))容器實現(xiàn),下面給大家介紹Spring中管理bean對象的方式,感興趣的朋友一起看看吧

在Spring框架中,Bean的管理是核心功能,主要通過IoC(控制反轉(zhuǎn))容器實現(xiàn)。以下是Spring管理Bean對象的專業(yè)級說明:

1.Bean的聲明與注冊

Spring提供多種方式定義Bean:

1.1 基于XML配置

<beans>
    <bean id="userService" class="com.example.UserServiceImpl"/>
    <!-- 作用域、依賴注入等配置 -->
    <bean id="dataSource" class="com.example.DataSource" scope="singleton">
        <property name="url" value="jdbc:mysql://localhost:3306/db"/>
    </bean>
</beans>

1.2 基于注解(主流方式)

@Component及其衍生注解:

@Service  // 標記為Service層Bean
public class UserService {}
@Repository  // 標記為DAO層Bean
public class UserDao {}

@Bean(用于配置類中):

@Configuration
public class AppConfig {
    @Bean
    public DataSource dataSource() {
        return new DriverManagerDataSource();
    }
}

1.3 基于Java Config

完全替代XML的現(xiàn)代方式:

@Configuration
@ComponentScan("com.example")  // 自動掃描包
public class AppConfig {
    @Bean
    @Scope("prototype")
    public MyBean myBean() {
        return new MyBean();
    }
}

2.Bean的作用域(Scope)

Spring支持多種作用域,通過@Scope指定:

  • singleton(默認):單例,容器中唯一實例。
  • prototype:每次請求創(chuàng)建新實例。
  • request/session/application:Web相關作用域。
  • 自定義作用域:通過Scope接口擴展。
@Bean
@Scope("prototype")
public MyPrototypeBean myPrototypeBean() {
    return new MyPrototypeBean();
}

3.Bean的生命周期管理

Spring允許通過以下方式干預生命周期:

初始化/銷毀回調(diào)

  • 實現(xiàn)InitializingBean/DisposableBean接口。
  • 使用@PostConstruct@PreDestroy注解。
  • XML中配置init-methoddestroy-method。
@Component
public class LifecycleBean {
    @PostConstruct
    public void init() {
        System.out.println("Bean初始化");
    }
    @PreDestroy
    public void cleanup() {
        System.out.println("Bean銷毀");
    }
}

BeanPostProcessor接口:對所有Bean的初始化前后進行攔截。

@Component
public class CustomBeanPostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) {
        // 初始化前邏輯
        return bean;
    }
}

4.依賴注入(DI)

Spring通過DI實現(xiàn)Bean間解耦:

4.1 注入方式

構造器注入(推薦):

@Service
public class UserService {
    private final UserDao userDao;
    @Autowired  // Spring 4.3+可省略
    public UserService(UserDao userDao) {
        this.userDao = userDao;
    }
}

Setter注入

@Autowired
public void setUserDao(UserDao userDao) {
    this.userDao = userDao;
}

字段注入(不推薦,破壞封裝性):

@Autowired
private UserDao userDao;

4.2 條件化注入

@Qualifier:解決同一類型多個Bean的歧義。

@Autowired
@Qualifier("mainDataSource")
private DataSource dataSource;

@Primary:標記優(yōu)先注入的Bean。

@Conditional:根據(jù)條件注冊Bean。

5.Bean的懶加載與預初始化

@Lazy:延遲初始化,首次請求時創(chuàng)建。

@Bean
@Lazy
public HeavyResource heavyResource() {
    return new HeavyResource();
}

預初始化:默認單例Bean在容器啟動時初始化(可通過lazy-init="true"禁用)。

6.高級管理特性

  • FactoryBean接口:定制復雜對象的創(chuàng)建邏輯。
  • @Import@Profile:模塊化配置與環(huán)境隔離。
  • 自定義作用域:實現(xiàn)Scope接口(如線程級作用域)。

7.容器啟動與Bean獲取

// 基于注解的容器
AnnotationConfigApplicationContext context = 
    new AnnotationConfigApplicationContext(AppConfig.class);
UserService userService = context.getBean(UserService.class);
// 基于XML的容器
ClassPathXmlApplicationContext xmlContext =
    new ClassPathXmlApplicationContext("applicationContext.xml");

最佳實踐建議

  • 優(yōu)先使用構造器注入(保證不可變性和可測試性)。
  • 避免字段注入,減少框架耦合。
  • 合理選擇作用域,避免無狀態(tài)Bean使用prototype。
  • 利用@Profile區(qū)分環(huán)境配置(如dev/prod)。

Spring的Bean管理機制是其設計哲學的核心體現(xiàn),合理利用這些特性可以構建高內(nèi)聚、低耦合的企業(yè)級應用。

到此這篇關于Spring中如何管理bean對象?的文章就介紹到這了,更多相關spring管理bean對象內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java畢業(yè)設計實戰(zhàn)之二手書商城系統(tǒng)的實現(xiàn)

    Java畢業(yè)設計實戰(zhàn)之二手書商城系統(tǒng)的實現(xiàn)

    這是一個使用了java+JSP+Springboot+maven+mysql+ThymeLeaf+FTP開發(fā)的二手書商城系統(tǒng),是一個畢業(yè)設計的實戰(zhàn)練習,具有在線書城該有的所有功能,感興趣的朋友快來看看吧
    2022-01-01
  • spring webflux自定義netty 參數(shù)解析

    spring webflux自定義netty 參數(shù)解析

    這篇文章主要介紹了spring webflux自定義netty 參數(shù)解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • java選擇框、單選框和單選按鈕

    java選擇框、單選框和單選按鈕

    本文給大家介紹的是java中選擇框、單選框和單選按鈕的操作方法,十分的簡單實用,有需要的小伙伴可以參考下。
    2015-06-06
  • Java獲取請求url地址的幾種常見方法

    Java獲取請求url地址的幾種常見方法

    在 Java Web 應用中,要拿到客戶端發(fā)過來的完整請求 URL,通常都是在 Servlet 或 Spring MVC 的控制器里,通過注入 HttpServletRequest 來獲取,下面給出幾種常見場景的示例,需要的朋友可以參考下
    2025-05-05
  • Java如何隨機生成圖片驗證碼

    Java如何隨機生成圖片驗證碼

    這篇文章主要為大家詳細介紹了Java如何隨機生成圖片驗證碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • java多線程之wait(),notify(),notifyAll()的詳解分析

    java多線程之wait(),notify(),notifyAll()的詳解分析

    本篇文章是對java多線程 wait(),notify(),notifyAll()進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • SpringBoot使用@valid進行參數(shù)校驗的流程步驟

    SpringBoot使用@valid進行參數(shù)校驗的流程步驟

    SpringBoot 提供了一種方便的方式來進行參數(shù)校驗:使用 Hibernate Validator,Spring Boot 提供了一種方便的方式來進行參數(shù)校驗:使用 Hibernate Validator,所以本文給大家介紹了SpringBoot使用@valid進行參數(shù)校驗的流程步驟,需要的朋友可以參考下
    2023-09-09
  • Mybatis插件+注解實現(xiàn)數(shù)據(jù)脫敏方式

    Mybatis插件+注解實現(xiàn)數(shù)據(jù)脫敏方式

    這篇文章主要介紹了Mybatis插件+注解實現(xiàn)數(shù)據(jù)脫敏方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Maven profile實現(xiàn)不同環(huán)境的配置管理實踐

    Maven profile實現(xiàn)不同環(huán)境的配置管理實踐

    這篇文章主要介紹了Maven profile實現(xiàn)不同環(huán)境的配置管理實踐,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • java IO 文件操作方法總結(jié)

    java IO 文件操作方法總結(jié)

    這篇文章主要介紹了java IO 文件操作方法總結(jié)的相關資料,需要的朋友可以參考下
    2017-04-04

最新評論

临泉县| 阿拉善右旗| 石阡县| 兴业县| 西吉县| 定西市| 西丰县| 昌黎县| 喀什市| 保亭| 七台河市| 萝北县| 富川| 略阳县| 马尔康县| 柳州市| 钟山县| 建平县| 凉山| 灵川县| 溧水县| 天峻县| 昂仁县| 广丰县| 巍山| 利津县| 商南县| 安义县| 隆子县| 无为县| 灵山县| 漾濞| 蓬安县| 东宁县| 华坪县| 于都县| 乐都县| 福建省| 乌鲁木齐县| 安西县| 邯郸县|