springioc2

1.Bean的生命周期回调

       1-1.实现InitalizingBean接口,重写afterpropertiesSet方法

该方法会在对应实现接口的Bean被实例化之后自动调用。但是这种方式和spring的耦合度非常高,严重依赖于spring的某个接口。

 

       1-2.xml文件指定init方法

xml文件注入,在bean标签上写好init属性即可指定对应的init方法。【不推荐】

 

       1-3.@PostConstrut

 

      1-4.其他

 

           1-4-1.depends-on

beanOne当前的一些初始化依靠manager里面的一些东西,但是他们之间没有直接依赖的关系。

 

           1-4-2.lazy加载

一般会使用@Lazy,当然你如果用xml的话,直接在bean标签里面加上去。

 

         1-4-3.filter扫描配置

我们一般会指定一个扫描的路径,但是有时候,一个大路径下面,我们不想要扫描到某个包,这个时候就可以用excludeFilter来排除掉。

先来看看官方文档,注意的是,官方文档的写法:

 

           1-4-3.@Primary

使用@AutoWired的话,如果你注入2个相同类型的bean,那么可以在需要的注入的主类上面加这个注解,这样会默认注入加了@Primary注解的类。

 

            1-4-4.@Qualifier

也是和@Autowired搭配使用,因为@Autowired默认只是使用属性名来做name注入。所以有了这个注解来辅助使用。

          1-4-5.加速类的扫描

大型项目中的类是成千上万的,这样扫描出来的类是非常多非常耗时的。所以我们可以引入下面这个依赖,提前给所有要扫描的类加索引。加速扫描。

 

         1-4-6.代替注解

使用java自带的注解,其实也可以用带代替spring的一些注解

 

2.profile

用法就是直接在bean上面加一个@profile注解,这样的话,我们给对应的环境设置一下,就可以读取到了。

用法如下,加载一个spring容器之后,设置一下环境,设置一下javaconfig文件,重写刷新,启动容器加载即可扫描到对应的profile文件。【如果设定了环境,那么其他bean不会被扫描到】

【如果没设置profile,所有类会被扫描到】

 

3.整合mybatis

mybatis我们一般不会单独使用,因为单独使用myabtis来操控数据库非常麻烦,而且依赖也非常多,需要opensession等繁琐操作。我们一般会使用mybatis为我们整合号spring的一个依赖,叫做mybatis-spring。mybatis-spring是mybatis为我们优化的,能够无缝和spring整合。把myabtis的很多bean都交给spring来管理,我们就不用手动new出mybatis的各种bean,再交给spring了。

<dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>2.0.3</version>
    </dependency>

    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.6</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.16</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>4.3.16.RELEASE</version>

 

4.循环依赖

    一般来说,spring使能够解决循环依赖的。他是这样解决循环依赖的:=>

我们假设A和B互相依赖,然后A和B都被加载到内存里面,这个时候先实例化出来,A和B的属性都还没set进去。然后A中有B属性,那么先找到B实例,注入给A。然后找到B,B里面依赖A,把A注入给B,这样就实现了循环依赖了。

但是如果A和B互相依赖,B是一个property的多实例,那么这个循环依赖spring无法自行解决。【为什么property不行,我们后面研究一下源码才能知道】

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值