spring懒加载是如何实现的

worktile 其他 61

回复

共3条回复 我来回复
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    Spring框架中的懒加载是一种延迟加载方式,可以实现在需要使用时才真正创建和初始化Bean。在Spring中,默认情况下,所有的Bean在容器启动时都会被创建和初始化。但是,对于一些大对象或者资源密集型的Bean,预先创建和初始化可能会造成性能上的损耗。

    要实现懒加载,可以通过以下两种方式:

    1. 声明式懒加载:在XML配置文件中,通过在Bean的定义中添加lazy-init="true"来实现。这样,在容器启动时,这个Bean不会立即被创建和初始化,而是在第一次使用时才会被创建和初始化。示例代码如下:
    <bean id="myBean" class="com.example.MyBean" lazy-init="true"/>
    
    1. 编程式懒加载:在Java配置中,通过使用@Lazy注解来实现懒加载。在Bean的定义中添加该注解,同样可以延迟创建和初始化Bean。示例代码如下:
    @Configuration
    public class MyConfig {
    
        @Bean
        @Lazy
        public MyBean myBean() {
            return new MyBean();
        }
    }
    

    需要注意的是,懒加载只对单例Bean生效。对于原型(prototype)或其他作用域的Bean,懒加载设置不起作用,它们在实际使用时会立即被创建和初始化。

    懒加载的好处是可以提高系统的性能和资源利用率。只有当真正需要使用Bean时,才会进行实例化和初始化操作,避免了不必要的费用和资源消耗。同时,懒加载也提供了更灵活的控制,可以根据业务需求按需创建和初始化Bean。

    1年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    Spring的懒加载是一种延迟加载的机制,它允许在需要使用之前不会立即加载对象或资源。它可以减少系统的启动时间和内存占用,并提高系统的性能和响应速度。下面是Spring懒加载的实现方式:

    1. 组件扫描的懒加载:在Spring中,可以将@ComponentScan注解标记在配置类上,配置扫描的包路径,通过设置lazyInit属性为true来实现懒加载。这样,在系统启动时,Spring只会创建配置类的单例对象,而不会立即创建其他的Bean实例。
    @Configuration
    @ComponentScan(basePackages = "com.example", lazyInit = true)
    public class AppConfig {
       //...
    }
    
    1. Bean定义的懒加载:除了组件扫描,Spring还支持对单个Bean进行懒加载。可以使用@Bean注解的lazy属性来实现。在使用@Bean定义的方法上,设置lazy属性为true来实现懒加载。
    @Configuration
    public class AppConfig {
        @Bean(lazy = true)
        public SomeBean someBean() {
            return new SomeBean();
        }
    }
    
    1. 延迟初始化的代理:Spring AOP(面向切面编程)可以通过代理的方式实现懒加载。使用@Lazy注解,将需要懒加载的Bean的创建延迟到第一次使用时。
    @Service
    @Lazy
    public class UserServiceImpl implements UserService {
       //...
    }
    
    1. 延迟加载的注解:除了@Lazy注解,Spring还提供了更细粒度的懒加载注解。可以使用@Lazy注解来标记方法、属性或参数,以实现懒加载。
    @Component
    public class OrderService {
        @Lazy
        @Autowired
        private AuthService authService;
      
        @Lazy
        @PostMapping("/orders")
        public void createOrder(@Lazy @RequestBody Order order) {
            //...
        }
    }
    
    1. XML配置的懒加载:除了使用注解,还可以通过XML配置文件来实现懒加载。在Bean的定义中,使用lazy-init属性设置为true表示懒加载。
    <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">
     
        <bean id="someBean" class="com.example.SomeBean" lazy-init="true"/>
     
    </beans>
    

    以上是Spring懒加载的几种实现方式,可以根据具体需要选择适合的方式来延迟加载对象和资源。懒加载可以提高系统的性能和资源利用率,尤其在启动时需要加载大量对象或资源时特别有用。

    1年前 0条评论
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    Spring懒加载指的是在使用该Bean对象时才会进行实例化和初始化,而不是在容器启动时就实例化和初始化。懒加载可以减少启动时间和资源占用,只有当需要使用Bean时才进行加载。

    Spring框架提供了几种方式来实现懒加载,包括使用@Bean注解、@Lazy注解和lazy-init属性。

    1. 使用@Bean注解:Spring允许在@Configuration配置类中使用@Bean注解来指定Bean的懒加载。
    @Configuration
    public class AppConfig {
     
        @Bean
        @Lazy
        public MyBean myBean() {
            return new MyBean();
        }
    }
    

    在上面的例子中,当容器需要使用MyBean时,才会去实例化和初始化该Bean对象。

    1. 使用@Lazy注解:除了在@Configuration类中使用@Bean注解实现懒加载外,还可以在@Component、@Service、@Controller和@Repository等注解中使用@Lazy注解来实现懒加载。
    @Component
    @Lazy
    public class MyBean {
        // code...
    }
    

    在上面的例子中,MyBean在容器启动时并不会被实例化和初始化,只有在需要使用该Bean的地方才会进行加载。

    1. 使用lazy-init属性:除了上述两种注解方式,还可以通过配置文件的lazy-init属性来实现懒加载。
    <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">
    
        <bean id="myBean" class="com.example.MyBean" lazy-init="true">
            <!-- bean configuration -->
        </bean>
    
    </beans>
    

    在上面的例子中,通过将lazy-init属性设置为true,可以实现MyBean的懒加载,当需要使用该Bean时才会进行实例化和初始化。

    总结:Spring提供了多种方式来实现懒加载,包括使用@Bean注解、@Lazy注解和lazy-init属性。无论使用哪种方式,懒加载都可以在需要使用Bean时才进行实例化和初始化,减少启动时间和资源占用。

    1年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部