AutoWired注解和Lazy延迟加载
⼀.代码截图:
@Lazy是延迟加载的意思, 容器启动时不创建对象, 当从容器中需要获取此对象时才创建.
@Lazy//@Lazy注解可以⽤在类上, 还可以⽤在普通⽅法上,还可以⽤在构造⽅法上,还可以⽤在参数上,还可以⽤在属性上. 但是只⽤在类上有效果.其他地⽅没效果
@Lazy有三种写法:@Lazy(true)  @Lazy(value=true)  @Lazy (value默认值是true)
注:@Bean的作⽤和@Conponent作⽤⼀样, 但是@Bean必须写在配置类中(配置有@SpringBootApplication注解的类, 这个注解上标注有
@SpringBootConfiguration)
注:@Bean注解⽤在⽅法上表⽰此⽅法会返回⼀个对象并将此对象交给spring管理. bean对象的id就是⽅法名,bean对象的类型就是对象的类型
@Bean注解相当于xml中的<bean id="⽅法名"  class="类的全限定名">
@Bean⼀般⽤于spring整合其他技术时采⽤的, 因为其他技术可能没办法修改源代码没法给其他技术的类上标注注解来⽣成bean对象,所以⽤@bean的⽅式来new对象
@Autowired⽅式注⼊
注意: 测试getWCache⽅法的话可以运⾏测试类,也可以运⾏启动类
⼆.代码:
q.pimon.cache;
2
3public interface Cache {
4
5 }
q.pimon.cache;
2
3import org.springframework.stereotype.Component;
4
5 @Component
6public class WeakCache implements Cache{
7
8public WeakCache() {
9        System.out.println("WeakCache");
10    }
11
12 }
q.pimon.cache;
2
3import javax.annotation.PostConstruct;
4import javax.annotation.PreDestroy;
5
6import t.annotation.Lazy;
7import t.annotation.Scope;
8import org.springframework.stereotype.Component;
9
10 @Component
11 @Scope("singleton")
12//@Lazy(true)
13//@Lazy(value=true)
14 @Lazy//@Lazy注解可以⽤在类上, 还可以⽤在普通⽅法上,还可以⽤在构造⽅法上,还可以⽤在参数上,还可以⽤在属性上. 但是只⽤在类上有效果.其他地⽅没效果15public class DefaultCache implements Cache{
16
17public DefaultCache() {
18        System.out.println("DefaultCache()");
19    }
20
21//此⽅法会在对象的构造⽅法之后执⾏。
22    @PostConstruct
23public void init() {
24        System.out.println("init()");
25    }
26
27//此⽅法会在对象销毁之前执⾏
28    @PreDestroy
29public void destory() {
30        System.out.println("destory()");
31    }
32 }
q.pimon.cache;
2
3import org.junit.jupiter.api.Test;
4import org.springframework.beans.factory.annotation.Autowired;
5import org.springframework.beans.factory.annotation.Qualifier;
6import org.st.context.SpringBootTest;
7
8 @SpringBootTest
9public class DefaultCacheTest {
10    @Autowired//先按类型注⼊,再按名字注⼊. 如果⽤@Qualifier指定了名字或者类型则不采取默认的⽅式,⽽采⽤@Qualifier指定的⽅式注⼊
11    @Qualifier("weakCache")
12private Cache deCache;
13
14    @Test
15public void testCache() {
16        System.out.println(deCache);
17    }
18
19 }
q;
2
3import org.springframework.boot.SpringApplication;
4import org.springframework.boot.autoconfigure.SpringBootApplication;
5import t.annotation.Bean;
6import t.annotation.Lazy;
q.pimon.cache.WeakCache;
8
9 @SpringBootApplication
10public class SpringBootDay010728Application {
11/*
12    @Lazy
13    @Bean
14    public WeakCache getWCache() {
15        System.out.println("getWCache");
16        return new WeakCache();
17    }*/
18
19public static void main(String[] args) {
20        SpringApplication.run(SpringBootDay010728Application.class, args);
21    }
22
23 }
springframework是什么意思
注意:  单元测试类必须在启动类的同包下或者其的⼦包下, 并且单元测试类上必须⽤ @SpringBootTest注解标注 
@AutoWired注⼊规则:
先按照类型注⼊,如果有两个同⼀类型的对象, 则还会基于属性名进⾏查,如果没到就抛出异常.
此时还可以配合@Qualifier注解指定要注⼊的对象名字
//如果@Autowired⽤构造⽅法给cache注⼊对象时,发现了两个Cache类型的对象的话就会抛出异常, //此时可以结合@Qualifier给构造⽅法的参数指定⼀个对象注⼊
1 @Autowired
2public CacheService(@Qualifier("defaultCache")Cache cache) {
3this.cache = cache;
4 }

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。