2021-06-23Spring学习笔记

6.23学习笔记

实验14:[SpEL测试I]
在SpEL中使用字面量、
引用其他bean、
引用其他bean的某个属性值、
调用非静态方法
调用静态方法、
使用运算符

	之前所用的property是手动赋值
	自动赋值:
		autowire="default":不自动赋值
		autowire="no":不自动赋值,与default类似
		autowire="byName":通过组件名字赋值,一般不会存在两个相同的组件名称
		autowire="byType":通过组件的类型赋值,如果存在多个相同类型的组件,会报错
						Caused by: 
						org.springframework.beans.factory.NoUniqueBeanDefinitionException: 
						No qualifying bean of type [com.guigu.spring.Car] is defined: 
						expected single matching bean but found 2: car,car1 						
		autowire="constructor":通过有参构造器进行赋值
					1>需要在该类中创建有参构造器,如果没有创建,会自动赋值为空
					2>如果创建了有参构造器:
						它会通过类型寻找组件并进行赋值,
						如果没有该类型的组件,会赋值为null
						如果存在多个同类型的组件,会优先匹配与参数名相同的组件作为id并进行赋值,如果没有相同的,会赋值为null
						但是注意,如果需要赋值的组件是一个list类型,将会将所有该类型的组件全赋值进去

实验15:通过注解分别创建Dao、Service、Controller★
通过将注解加在类上来将组件快速加入到ioc容器中
Spring中有四个常用注解:
@Service:业务逻辑,该注解推荐加在业务逻辑层的组件上,一般命名为某某Service
@Repository:数据库(持久化层,Dao层),该注解推荐加在数据库的组件上,一般命名为某某Dao
@Controller:控制器,也就是servlet,推荐加在该组件上,一般命名为某某servlet
@Component:其他,如果其他组件不属于以上,推荐加该注释
注意:随便添加任何一个注解都可以将该组件快速加入到ioc容器中,但是我们推荐写各自的注解,为了提升代码的可读性

 		使用:
 		1.为各个组件加好注解
 		2.在容器中进行扫描,需要用到context名称空间,所以需要在Namespaces下进行导入
 		3.<context:component-scan base-package=""></context:component-scan>
 		4.base-package是需要加入ioc容器的类的路径,一般设置为上层目录,且至少两个
 		5.默认导入之后的id为类名首字母小写
 		6.一定要导入aop包,否则会报错
 		7.导入之后即可通过id找到加入ioc内的组件
		
		注意:通过注解加入ioc容器的组件行为都是默认的,也就是都是单实例组件

但是也可以通过注解修改各种行为,比如修改为多实例组件,就在该类上添加注释@Scope(value=”prototype”)
组件的id是可以修改的,像这样@Controll(“修改的id”)

实验16:使用context:include-filter指定扫描包时要包含的类
<context:exclude-filter type=“annotation” expression=""/>
这个是写在<context:component-scan base-package=""></context:component-scan>里面的
常用的就这两个:
type=“annotation”:根据注解的全类名进行扫描
expression=“注解的全类名”
type=“assignable”:根据类的全类名进行扫描
expression=“类的全类名”
实验17:使用context:exclude-filter指定扫描包时不包含的类
<context:include-filter type=“annotation” expression=""/>
这个是写在<context:component-scan base-package=""></context:component-scan>里面的
type=“annotation”:根据注解的全类名进行扫描
expression=“注解的全类名”
type=“assignable”:根据类的全类名进行扫描
expression=“类的全类名”
注意:需要在<context:component-scan base-package=""></context:component-scan>里面修改use-default-filters=“false”
像这样:<context:component-scan base-package="" use-default-filters=“false”></context:component-scan>
如果为true,则表面默认全部扫描进来,这时候再去除就晚了,所以将默认过滤规则设置为false

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值