项目实训——第一周第二次日志

研究生管理系统
项目实训的开题一周,确立团队后,集体和导师商讨了需要,并分为了架构组、学生端、老师端、管理端四个小组分工合作完成此次实训内容。我主要负责学生端的后端,在第一周的主要任务是接收需求和学习技术。后端采用SpringBoot架构,前期对此也有了一定认识,但对底层实现和工作原理有很大的好奇,预备简单学习一下spring框架。

Spring
1.1简介
范围:java任何应用
框架:interface21
创始人:RodJohnson
原则:强大的向后兼容性;
SSH:Struct2+Spring+Hibernate
SSM:SpringMvc+Spring+Mybatis(此次实训的重点)
SpringMvc和maven
优点:IOC;AOP
1.2总结:Spring是一个轻量级的控制反转和面向切面编程的框架。
1.3组成:
在这里插入图片描述
1.4拓展
springboot:一个快速开发的脚手架。基于此可以快速开发单个服务。约定>配置
springcloud:基于springboot实现。
弊端:配置太多

2.ioc理论推导
之前编程模式:
UserDao
UserDaoImpl
UserService
UserServiceImpl
在之前的业务 中,用户的需求可能会影响我们原来的代码,我们需要根据用户的需求去修改代码!代价昂贵!
我们使用一个set接口实现。UserServiceImpl设置一个setDao方法。降低系统耦合性。这是IOC 的原型。
IOC:控制反转是一个通过描述(XML或者注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IOC容器,其实现的方法是依赖注入(DI)。

3.HelloSpring
bean=对象
类型 变量名=new 类型();
bean=对象 相当于new了一个Hello()
bean的两个属性id就是bean的唯一标识可以理解为对象名,class就是new 的对象是对象所对应的全限定名(报名+类型),property相当于给对象中的一个属性设值用的是set。
对象由spring来创建,管理和装配,之后用户和程序员都不需要改程序了,只需要改配置文件就可以了

4.IOC创建对象的方式
创建bean的时候对象就已经实例化了
getbean时通过默认的无参构造方法创建了对象
如果我们使用有参构造方法:将property改为constructor-arg,他可以通过index(下标从0开始)、数据类型type(如果有两个string就不行了)、直接通过参数名。
总结:配置文件加载时,容器中管理的对象就已经被加载了

5.Spring配置
5.1)别名alias:给bean起个别名,可以通过别名取到对象
5.2)name:多个别名
5.3)import一般用于团队开发,他可以将多个配置文件,导入合并为一个。项目中有多个人开发,这三个人负责不同的类开发,不同的类需要注册在不同的bean中我们可以利用import将所有人的beans.xml合成一个总的,一般叫applicationContext.xml

6.依赖注入
6.1)构造器注入
6.2)set方式注入【重点】
依赖注入:set注入!依赖:bean对象的创建依赖容器 注入:bean对象地所有属性都有容器来注入
普通值注入

<property name="name" value="天赐"/>

bean注入

<property name=“address”  ref=“address"/>

数组注入

<property name="books">
 <array>
<value>红楼梦</value>
<value>西游记</value>
</array>
<property/>

list注入

<property name=“hobbys”>
<list>
<value>听歌</value>
<value>篮球</value>
</list>
</property>

map注入

<property name="card">
<map>
<entry key="身份证" value=“111111”>
<entry key="银行卡" value=“111111”>
</map>
</property>

set注入

<property name="games">
<set>
<value>LOL</value>
<value>NBA2K</value>
</set>
</property>

null注入

<property name="wife" value=“”/>
<property name="wife" >
<null/>
</property>

properties注入

<property name="info">
<props>
<prop key="学号” >2222222</prop>
<prop key=“性别”></prop>
<prop key="username” >2222222</prop>
<prop key=“password”></prop>
</props>
</property>

6.3)拓展方式注入
p命名空间和c命名空间
注意点:两者不能直接使用,需要导入约束
6.4)作用域scope
单例模式:scope=“singleton”(默认的)
原型模式:scope="prototype"每次get时都会产生一个新的对象
request、session、application只能在web开发中使用到

7.Bean的自动装配
自动装备是spring满足bean依赖的一种方式
spring会在上下文中自动寻找并自动给bean装配属性

在spring中有三种装配的方式
xml中显示的配置
java中显示配置
隐式自动装配【重要】

7.1)测试
7.2)ByName自动装配,自动在容器上下文查找,和自己对象set方法后面的值对应的bean: autowire=“byName”
7.3)ByType自动装配,自动在容器上下文查找,和自己对象属性类型相同的bean: autowire=“byType” 不支持两个相同类型的对象
7.4)注解实现自动装配
jdk1.5 spring2.5支持
使用注解须知:
导入约束:context约束
配置注解的支持:<context: annotation-config/>

@Autowired 直接在属性上使用,甚至可以连set方法都不需要,用反向映射来实现的,前提是你这个自动装配的属性在IOC(spring)容器中存在且符合名字byname
科普:
@Nullable 表示这个字段可以为null
@Autowired (require=false)该属性值为null也没有问题

如果@Autowired自动装配的环境比较复杂,自动装配无法通过一个注解【@Autowired】完成的时候,我们可以使用@qualifier(value=“XXX“)去配置@Autowired的使用,指定唯一的bean对象注入

@Resource和@Resource(name=“xxx”)这是java自带的不需要spring,和@Autowired的区别:
都可以放在属性字段上
@Autowired默认使用byName实现
@Resource默认是byName,如果找不到名字,则通过byType实现,两个都找不到就报错。
@Component
在这里插入图片描述

习惯:项目里可以建一个markdown文件,将依赖和注解总结到里面

8.使用注解开发
在Spring4之后,要使用注解开发,必须要保证aop的包导入了
使用注解需要导入context约束,增加注解支持。

1)bean
2)属性如何注入:见上图
3)衍生的注解
@component有几个衍生注解,我们在web开发中会按照mvc三层架构分层。
dao【@Repository,】
service【@Service】
controller【@Controller】
这四个注释是一样的,都是代表将某个类注册到Spring中,装配bean
4)自动装配
5)作用域
@Scope
6)小结
xml与注解
xml更加万能,适用于任何场所,维护简单
注释相对简单,维护复杂
最佳实现:
xml用来管理bean
注释只负责完成属性的注入
我们在使用中只需要注意:必须让注解生效,就需要开启注解的context支持

9 使用java的方式配置Spring
我们小组完全不是用Spring的xml配置了,全权交个java来做
JavaConfig
@Configuration
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在SpringBoot中随处可见
@ComponentScan 扫描特定包下的注解

**小结:**
至此,对Spring有了基本的认识,同时对SpringBoot中
@ComponentScan
@SpringBootConfiguration
作用:SpringBoot的配置类 ,标注在某个类上 ,表示这是一个SpringBoot的配置类;
@EnableAutoConfiguration :开启自动配置功能
等一系列的注解有了根本的认识。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值