SSM学习笔记,Spring(四)

实验十二:引用外部属性文件(重要)

注意:需要依赖context名称空间
xmlns:context=“http://www.springframework.org/schema/context”
IDEA中要在xsi中加
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
数据库连接池作为单实例是最好的:
一个项目就一个连接池,连接池里面管理很多连接,连接是直接从连接池中拿
可以让Spring帮我们创建连接池对象,(管理连接池)
加载外部配置文件 固定写法classpath:配置文件名 表示引用类路径下的资源

首先编写外部配置文件
在这里插入图片描述
注意:username是spring中的关键字,因此key名称不能为username,为了防止配置文件中的key和spring自己的关键字冲突我们可以给key值加前缀

之后ioc容器中引入
在这里插入图片描述

实验十三:基于xml的自动装配(自动赋值)

自动装配(自动赋值,仅限于对自定义类型的属性有效)
autowire=“default”/“no”:不自动装配,不自动为car赋值
autowire=“byName”:按照名字自动装配
类中的属性名为private Car car,会在容器中找id等于这个(car)这个属性名的组件将它
自动赋值给bean;如果找不到则为null
autowire=“byType”:按照类型自动装配
以类中的属性类型去找到同样类型的组件,并将组件自动赋值给bean
但是如果容器中有多个这个类型的组件则会报错
如果没找到则为null
autowire=“constructor”:按照构造器进行赋值
public Person(Car car)
1)先按照有参构造器参数的类型进行装配,如果这个类型在容器中存在则会自动装配没有即为null
2)如果按照类型找到多个,参数的名作为id继续匹配;找到就装配没有则为null
好处为不会报错

如:
在这里插入图片描述
设置为autowire 自动装配后,无需手动进行赋值,IOC容器会自动进行装配

实验十四 SpEL测试(Spring Expression Language)Spring表达式语言

在SpEL中使用字面量在这里插入图片描述
引用其他bean的某个属性值
在这里插入图片描述
引用其他bean
在这里插入图片描述
调用静态方法
在这里插入图片描述
调用非静态方法
在这里插入图片描述

实验十五:通过注解分别创建Dao,Service,Controller(重要)

通过给bean上添加某些注解,可以快速的将bean加入到ioc容器中
某个类上添加上任何一个注解都可以快速的将这个组件加入到ioc容器的管理中
Spring中有四个注解

@Controller  控制器,我们推荐给控制器层(servlet包下的)组件加这个注解
@Service  业务逻辑,我们推荐给业务逻辑层的(service包下的)组件添加这个注解
@Repository  给数据库层(持久化层、dao层)的组件添加这个注解
@Component   给不属于以上几层的组件添加这个注解
注解可以随便加,Spring底层不会去验证你这个组件
是否如你注解所说就是一个dao层的或者是一个service层的组件
 但是我们推荐各自层加各自的注解,便于代码阅读

使用注解将组件快速加入到容器中需要一下几步:

1)给要添加的组件上标注解
2)告诉spring,自动扫描加了注解的组件,依赖context名称空间
3)一定要导入aop包不然会报错

如何修改通过注解加入到容器中的组件的默认名称呢?

注解("新的名称")
@Controller("bookServlet222")

如何变为多实例呢?

@Scope(value = "prototype")

注意:一定要进行自动组件扫描
context:component-scan:自动组件扫描
base-package:指定扫描的基础包:把基础包及他下面所有的包的所有加了注解的类自动扫描进ioc容器中
仅写一次
在这里插入图片描述

实验十六:使用context:include-filter指定扫描包时要包含的类

在这里插入图片描述
指定只扫描进入哪些组件默认都是全部扫描进来,一定要禁用默认过滤规则use-default-filters=“false”

实验十七:使用context:exclude-filter指定扫描包时不包含的类

在这里插入图片描述
扫描的时候排除一些不要的组件

    type="annotation":指定排除规则,按照注解进行排除。标注了指定注解的组件不要
    expression="注解的全类名"
    type="assignable":指定排除某个具体的类
    expression="类的全类名"
    不常用:
    type="aspectj"后来aspectj表达式
    type="custom" 自定义一个TypeFilter;自己写代码决定哪些是否使用
    type="regex"  还可以写正则表达式

实验十八:使用@Autowired注解实现根据类型实现自动装配(重点)

@Autowired的使用

  @Autowired
     private BookService bookService;

@Autowired的原理

 先按照类型去容器中找到对应的组件;bookService=ioc.getBean(BookService.class);
         ①找到就赋值
         ②没找到就抛异常
         ③找到多个?
             1)找到多个则会按照变量名作为id继续匹配
                 [1]按id找未找到就会报错,可以使用@Qualifier指定一个新的id
                        如果使用了@Qualifier还是找不到就会报错
                 [2]按id找找到了,自动装配
         发现@Autowired标注的自动装配的属性默认是一定装配上的
         找到就装配
         找不到就报错误提示
         @Autowired(required=false)找不到就自动装配null
         (@Autowired注解的required属性指定某个属性运行不被设置)

注意:
如果资源类型的bean不止一个,默认根据@Autowired注解标记的成员变量名作为id查找bean,进行装配(重点)
如果根据成员变量名作为id还是找不到bean:

  可以使用@Qualifier注解明确指定目标bean的id(重点)
  @Qualifier:指定一个名作为id,让spring别用变量名作为id,根据这个id找到指定的bean
  @Qualifier("id名")

方法上有@Autowired的话

 1)这个方法也会在bean创建的时候自动运行
 2)这个方法上的每一个参数都会自动注入值

在方法的形参位置使用@Qualifier注解:

在这里插入图片描述
会根据@Qualifier中的id查找相关的bean并注入值

@Autowired @Resource 都是自动装配的意思,其中的区别

  @Autowired:最强大,是spring自己的注解
  @Resource:是j2ee,java的标准
  @Resource的扩展性更强因为是java的标准,如果切换成另一个容器框架,@Resource仍然可以使用
   但是@Autowired则不行

实验十九:测试泛型依赖注入(重点)

在这里插入图片描述

在这里插入图片描述
依赖注入两个对象,BookService和UserService类均继承BaseService类,BaseService类为泛型类
在这里插入图片描述

输出带泛型的父类类型com.springstudy.service.BaseService<com.springstudy.bean.Book>

spring中可以使用带泛型的父类类型来确定这个子类的类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java SSMSpring+SpringMVC+MyBatis)是一种基于Java语言的Web开发框架。学习这个框架的过程中,我深刻体会到它的强大和灵活性。 首先,Spring框架为开发者提供了一个强大的IOC(Inversion of Control)容器,它能够管理和注入对象,减少了代码之间的耦合性。通过配置文件或注解,我们可以轻松地定义和获取各种对象,提高了代码的可维护性和可扩展性。 其次,SpringMVC框架是一种MVC(Model-View-Controller)设计模式的实现,它用于处理Web请求和响应。通过配置一个请求映射表和处理器,我们可以将请求分发给相应的控制器进行处理,并将处理结果返回给客户端。SpringMVC还提供了一些便捷的注解和标签,用于简化页面的渲染和参数的绑定。 最后,MyBatis是一种优秀的持久化框架,它能够将数据库操作与Java对象之间的映射简化为简单的配置。通过编写SQL映射文件和定义POJO(Plain Old Java Object)类,我们可以方便地进行数据库的增删改查操作,而无需编写冗长的SQL语句。 在学习Java SSM框架的过程中,我深入理解了软件开发过程中的MVC思想,并学会了如何利用SpringSpringMVC和MyBatis来实现一个完整的Web应用程序。通过不断的实践和调试,我逐渐培养了自己解决问题和调试代码的能力。 总结起来,学习Java SSM框架使我深入理解了软件开发的各个环节,并提升了我的编码能力和开发效率。我相信这些知识和经验将对我的职业发展和项目实施起到积极的促进作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值