Spring IOC的常见使用(一)

    xiaoxiao2025-04-18  4

    近段时间对spring源码加深了一下了解,真的要彻底搞懂spring的框架,从IOC到AOP,再到MVC和Mybatis,怕是还有很长的路要走。今年以来,自己跟着一个大佬的视频学习Spring,的确很有效果,看源码是需要技巧的,同时,希望以后的工作中能够吸取源码设计的精髓,在实际开发中举一反三,融会贯通。这是学习spring的第一篇博客,那么先从初识Spring IOC开始吧!

    Spring IOC的常见使用

    装配bean的三种方式

    显示装配的方式 通过xml的方式装配bean通过java代码装配bean 隐式装配的方式 自动化装配bean

    通过XML方式装配bean

    创建一个简单的bean <bean id="petStore" class="com.focus.spring.service.v1.impl.PetStoreServiceImpl"/> 借助构造器注入初始化bean <bean id="petStore" class="com.focus.spring.service.v3.impl.PetStoreServiceImpl"> <constructor-arg ref="accountDao"/> <constructor-arg ref="itemDao"/> <constructor-arg value="1"/> </bean> <bean id="accountDao" class="com.focus.spring.dao.v2.AccountDao"/> <bean id="itemDao" class="com.focus.spring.dao.v2.ItemDao"/> 借助property元素设置属性值 <bean id="petStore" class="com.focus.spring.service.v2.impl.PetStoreServiceImpl"> <property name="accountDao" ref="accountDao"/> <property name="itemDao" ref="itemDao"/> <property name="owner" value="alongso"/> <property name="version" value="2"/> <property name="flag" value="yes"/> </bean> <bean id="accountDao" class="com.focus.spring.dao.v2.AccountDao"/> <bean id="itemDao" class="com.focus.spring.dao.v2.ItemDao"/>

    通过java代码装配bean

    Configuration注解: 表明这个类是一个配置类,该类应该包含在spring应用上下文中如何创建bean的细节。

    代码示例1:构造函数通过调用get方法注入属性值

    @Configuration public class JavaConfig { @Bean public ItemDao getItemDao() { return new ItemDao(); } @Bean public AccountDao getAccountDao() { return new AccountDao(); } @Bean(name="petStore") public PetStoreServiceImpl getPetStoreServiceImpl() { return new PetStoreServiceImpl(getAccountDao(), getItemDao()); } } 代码示例2:构造函数通过参数值进行赋值 @Bean(name="petStore") public PetStoreServiceImpl getPetStoreServiceImpl(AccountDao accountDao,ItemDao itemDao) { return new PetStoreServiceImpl(accountDao, itemDao); } 代码示例3:通过先new一个实例,再set属性值赋值 @Bean(name = "petStore") public PetStoreServiceImpl getPetStoreServiceImpl(AccountDao accountDao, ItemDao itemDao) { PetStoreServiceImpl petStoreService = new PetStoreServiceImpl(accountDao, itemDao); petStoreService.setAccountDao(accountDao); petStoreService.setItemDao(itemDao); return petStoreService; }

    自动化装配bean

    包含的两个方面 组件扫描,Component注解: Spring会自动发现应用上下文中所创建的bean 自动装配,Autowired注解: Spring会自动满足bean之间的依赖 注意⚠️ 采用注解扫描注入的方式时,必须指明扫描包的路径,代码如下所示 @Component public class AccountDao { } @Component(value = "petStore") public class PetStoreServiceImpl implements IPetStoreService { @Autowired private AccountDao accountDao; @Autowired private ItemDao itemDao; } /** * 采用注解的方式对包进行扫描,配置扫描包的信息在配置类上, * 配置类必须有@Configuration@ComponentScan标识 * 在我们实际开发过程中,我们有使用到@RunWith和@ContextConfiguration这两个注解 */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = ComponentConfig.class) public class ApplicationContextV4JunitTest { @Autowired PetStoreServiceImpl petStore; @Test public void testGetBean() { //验证是否实例化成功 Assert.assertNotNull(petStore.getAccountDao()); Assert.assertNotNull(petStore.getItemDao()); } } package com.focus.spring.config; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration @ComponentScan(basePackages = {"com.focus.spring.dao.v4","com.focus.spring.service.v4.impl"}) public class ComponentConfig { } 通过XML启动组件扫描(在文件头加入context) <context:component-scan base-package="com.focus.spring.dao.v4,com.focus.spring.service.v4.impl"/>

    这是我结合《Spring实战》一起学习整理的。接下来,我想通过以上几个功能点,对代码采取静态阅读加上动态调试的方式,学习spring的IOC详细框架。未完待续。。。

    最新回复(0)