踏入spring领域近一年时间了,读了一些关于spring的书,负责公司的部分开发任务,这个过程中积累很多读书笔记以及项目开发技巧和问题,老话说得好温故而知新,现在是时候重新整理一下了:

今天开始第一篇:spring旅程:spring之Bean

bean的作用域:

1.spring 装配bean的方式有三种:

1.自动装配

2.java装配

3. 配置

 

在我们自己使用项目里面的bean的时候,使用自动装配是很好的选择

但是有些时候我们是没有办法使用自动装配的,比如我们需要使用第三方库里面的bean,我们没有办法去第三方库里面给bean添加component注解,这个时候我们就需要手动装配了

2.java装配

java装配需要我们创建一个java配置类,然后给其加上@Configuration注解,此注解表明这是一个配置类,其包含了spring如何创建bean的细节,或者说其负责提供哪些bean实例

 

3.如何声明一个简单的bean?如下:

@Bean

public MessageClient getMessageClient(){

return new MessageClient();

}

 

我们编写一个负责创建所需实例的方法然后给这个方法添加@Bean注解,此注解会告诉spring此方法返回的对象需要被spring管理

默认情况下bean的id和此方法的名字是一致的

 

4.对于构造器注入来说

使用自动装配或者java装配都是优于 的选择

 

5.对bean进行属性装配的时候可以使用 ,尤其是对list属性进行装配:

如下:

<bean id=\"propertyConfigurer\" class=\"org.spring work.beans.factory.config.PropertyPlaceholderConfigurer\">

<property name=\"fileEncoding\" value=\"utf-8\" />

<property name=\"locations\">

<list>

<value>classpath*:xxl-job-admin.properties</value>

</list>

</property>

</bean>

 

<property>标签用来装配bean的属性

<list>标签用来对list属性进行装配,例如上面对locations属性装配

 

如何让自动装配和javaConfig和 配置混合并合并在一起,型号在spring中这些配置方案之间不是互斥的

 

首先:自动装配的时候spring不会在意bean来自哪里,spring会考虑容器中所有的bean

 

那么javaConfig呢?其不会自动引用所有spring容器中bean,而是需要进行导入

我们可以使用@Import注解来描述这个配置类需要导入那个配置类中提供的bean,例如:

@Configuration

@Import(MybatisPlusConfig.class)

public class MQConfig {

P62

接下来我们就可以在MQConfig中引用MybatisPlusConfig中的bean了

 

6.那么如何让JavaConfig和 配置同时起作用呢?

@Configuration

@ImportResource(\"classpath:cd-config. \")

public class MQConfig {

 

如上使用@ImportResource注解,我们就可以在MQConfig中引用对应 配置文件中的bean了

 

如上在JavaConfig中我们可以通过@Import和@ImportResource来拆分JavaConfig类

7.那么如何对 配置文件进行拆分呢?

我们可以使用<import>标签进行拆分

 

<import resoune =\"ad-config. \"/>

 

上面实现了 中导入其他 配置文件

那么 中如何导入javaConfig呢?

可以使用bean标签导入,如下

<bean class=\"mapper.ScannerConfig\">

 

 

Spring表达式:

主要用来动态注入值到SpringBean里面

可以用来获取对象属性,例如LoginController里面UserMyLog注解的使用

 

@UserMyLog(\"用户注册接口,手机号为:#{#userRegistDTO.phone}\")

public YZLResponse regist(HttpServletRequest request, HttpServletResponse response,@Valid UserRegistDTO userRegistDTO)

 

上面的注解就使用了Spring表达式来获取方法参数对象的值

收藏 打印