首页 > 其他分享 >Spring学习笔记(二)

Spring学习笔记(二)

时间:2022-09-07 15:13:57浏览次数:81  
标签:容器 Autowired Spring Bean 笔记 学习 bean 注解 属性

Spring配置文件引入外部属性

引入数据库和Druid的依赖

在配置文件中配置DataSource的bean

 

直接配置属性

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">

  <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>

  <property name="url" value="jdbc:mysql://localhost:3306/test?serverTimezone=UTC"/>

  <property name="password" value="123456"/>

  <property name="username" value="root"/>

</bean>

 

将属性放入properties文件中,然后引入该文件,通过${key}的方式取值

创建resource bundle(资源包)文件,以entry格式把属性填进去

然后引入新标签context:property-placeholder 和之前在mybatis中引入properties文件类似

<context:property-placeholder location="jdbc.properties"

 

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">

  <property name="driverClassName" value=${jdbc.driver}/>

  <property name="url" value=${jdbc.url}/>

  <property name="password" value=${jdbc.password}/>

  <property name="username" value=${jdbc.username}/>

</bean>

 

Bean的作用域

单例和多例

bean标签中的scope属性可以设置bean的作用域,分别为singleton或prototype,两者表示单例和原型(多例)

在WebApplicationContext环境下时还有两个作用域request和session

 

Bean的生命周期

bean可以配置属性init-method destroy-method

ConfigurableApplicationContext是ApplicationContext的子接口,扩展了关闭和刷新容器的方法。

 

 

bean的生命周期与作用域有关

当scope为singleton时:

获取ioc容器就会创建该bean,实例化 依赖注入 初始化

关闭容器时会销毁bean对象,调用destroy-method配置的方法

 

当scope为prototype时:

只有getBean时才会创建对象,实例化 依赖注入 初始化

并且关闭容器时不会销毁对象。

 

Bean的后置处理器

后置处理器会在初始化前后执行额外操作

需要额外写一个类,实现BeanPostProcessor接口,然后将这个类配置到IOC容器的bean中,就会对容器内所有的bean产生效果

该接口中有两个方法,一个是初始化前,一个是初始化后,可以在方法中进行操作。

 

FactoryBean

一个类实现FactoryBean接口,然后配置到ioc的bean中,就可以得到工厂返回的类型,不需要进行Bean类型的配置。

这个接口有三个函数,getObject getObjectType isSingleton

 

 

基于XML的自动装配

自动装配:根据指定的策略,在IOC容器中匹配某个Bean,自动为bean中的类类型的属性或接口类型的属性赋值。

bean标签中有autowire属性,不装配:no|default 根据类型:byType 根据名字:byName

 

byType时,ioc容器中,每个类或接口只能有一个符合类型的bean

 

byName时,当ioc容器中有bean的id与属性名相同时会自动装配

 

 

 

基于注解管理Bean

将类标识为组件的常用注解

@Component 标识为普通组件

@Controller 标识为控制层组件

@Service 标识为业务层组件

@Repository 标识为持久层组件 

 

功能都一样,都是加到bean中,互为别名

加到实现类上,不要加到接口上

 

扫描注解

添加注解后需要在ioc的配置文件中添加扫描标签

<context:component-scan base-package="com.darkpar"></context:component-scan>

 

扫描标签中的过滤器

<context:component-scan base-package="com.darkpar">

  <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller">

</context:component-scan>

上面是排除指定注解类型,即不扫描Controller注解的类,expression中填写注解的全类名

exclude-filter或include-filter,分别是排除过滤器和只扫描过滤器

在使用include-filter时,需要在context:component标签中设置属性use-default-filters为false

use-default-filters属性,为true时扫描所有文件(默认),为false时不扫描任何文件

 

 

type也可以设置为assignable,expression中填写全类名,过滤指定的类型

 

通过扫描的Bean的ID

默认为类名首字母小写

可以在注解的value中设置id

 

基于注解的自动装配

在成员变量上添加注解@Autowired,此时不需要添加set方法

在set方法上添加注解@Autowired

在构造方法上添加@Autowired

 

@Autowired原理

默认通过byType方式,在IOC容器中通过类型匹配bean

当有多个类型匹配的bean时,会按byName方式进行匹配

当有多个类型匹配的bean且都不与属性名相同时,会抛异常

此时可以在使用@Autowired的属性上添加注解@Qualifier(“name”)此时可以按byName方式找到唯一的bean

 

基于注解自动装配时,默认是如果没有能够匹配的bean时,会抛异常,基于xml的则是不能匹配就按默认值赋值

其中@Autowired注解中有required属性,注解时默认为true,即必须有匹配的bean,而xml时相当于false

 

疑问:为什么在成员变量上没set方法还可以赋值,反射时进行权限变更了?

 

标签:容器,Autowired,Spring,Bean,笔记,学习,bean,注解,属性
From: https://www.cnblogs.com/darkpar/p/16665484.html

相关文章

  • Markdown学习
    Markdown学习标题三级标题四级标题字体helloworldhelloworldhelloworldhelloworld引用加油努力学习,走向人生巅峰分割线图片超链接点击跳转到我的博......
  • 低代码平台amis学习 五:添加「日期范围」参数,解决起止日期提取问题
    之前写过一个造数接口,它需要传递日期参数,如下前端暴露一个「月份范围」组件,选好日期后点击提交,会提交「起始月份」和「终止月份」2个参数 接下来我要把这个功能移植到......
  • dp 套 dp 学习笔记
    dp的本质:通过不同的转移更新状态的答案,就像DAG上的拓扑一样。dp套dp的本质:将内层dp的答案作为外层dp的状态进行转移。比如某个dp的状态为\(f_{i,j}\),第二维......
  • 直播平台源代码,uniapp中样式的学习及如何使用scss和字体图标
    直播平台源代码,uniapp中样式的学习及如何使用scss和字体图标uni-app中的样式rpx即响应式px,一种根据屏幕自适应动态单位。以750宽的屏幕为基准,750rpx恰好为屏幕宽度。屏......
  • 【论文笔记】LayoutLMv2:将视觉信息加入到预训练阶段的跨模态文档预训练模型
    概述LayoutLMv2是对LayoutLM的改进,主要有以下几点区别:将视觉信息加入到了预训练阶段,而不是LayouLM中的微调阶段删除了MDC,添加了text-imagealignment和text-imgaematc......
  • spring-boot spring-cloud spring-cloud-alibaba版本对应
    https://spring.io/projects/spring-cloud#overview   https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E ......
  • java学习笔记20
    增强for循环JAVA5引入一种主要用于数组或集合的增强型for循环格式如下for(声明语句:表达式){//代码句子}publicclassForDemo05{  publicstaticvoidmain(Strin......
  • 外卖系统学习笔记
    开发日记:用户登录界面:前端发送ajax请求,后端对请求处理,去数据库查询信息,匹配成功后将用户id存入session,并返回登录成功。并添加拦截器,获取前端请求的URL,判断请求路径是否正......
  • Flink学习
    一、Flink部署1.集群角色:hadoop102:JobManager;hadoop103:TaskManager;hadoop104:TaskManager2.集群启动$bin/start-cluster.sh3.查看flink状态:jps4.停止集群$b......
  • springboot集成hibernate-validator
    一、项目搭建1、使用springboot搭建一个web工程建web工程,不使用骨架创建maven的Java工程即可,不需要创建maven的web工程。2、添加父工程坐标和添加web启动器<parent>......