在了解spring之前,先来下载一个叫做maven的东西,maven就是用来管理spring很多jar包的仓库.回顾上次的JDBC我们需要下载jar包,我们使用spring开发需要更多的jar包,但是一个一个的去下载又很麻烦,所以我们可以使用maven来帮助我们管理.
1.下载maven
maven官网: maven.apache.org/
maven仓库: mvnrepository.com/
2.配置maven环境变量.
直接将maven的bin目录加入path中即可
3.修改maven储存路径和添加镜像.
因为maven会存储很多东西,为了了解存储在哪里,我们可以直接添加一个,方便后续阅读.
因为maven是在外国,我们添加镜像之后再通过maven下载jar包速度会快一点.
<mirror>
<id>nexus-aliyun</id>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
<mirrorOf>central</mirrorOf>
4.通过IEDA绑定maven
在settting中找到这个
接下来讲解一下spring基础.
spring中没有对象说法,在之前的学习中都会有对象这一说法,在spring中统一叫做bean.spring有一个东西叫做控制反转(IOC).
控制反转: 简单理解就是把所有对象都交给spring容器,需要使用的时候直接拿出来即可,不需要用可以放在spring容器里面.可以实现松耦合,简单一句话: srping来创建,管理,分配. 当然,也不是平白无故的注入进入,需要我们通过一些方法来配置.
1.通过xml配置进行注入(创建一个xml文件,最好见名知意).
1.1基于setter方法注入
添加一个bean标签,class: 注入类的路径. id: 在类中通过id来获取该类.alias标签,为了取一个别名.里面的property标签就是给这个类赋值.
1.2基于构造方法注入.
在使用这个方法注入之前,需要在该类提前写好相应的有参构造方法,不然会报错.
1.3复杂数据类型注入.
这个是List和Map数据类型的注入
如果是自定义对象类型的注入可以通过依赖内部bean和依赖外部bean.
依赖内部bean
依赖外部bean
ref中的值就是外部bean中的id值,这样才会实现依赖.
1.4懒加载和单例,原型
可以在一个bean标签里面加入lazi-init,值可以是true或者false.如果一个bean有懒加载,那么这个对象只有在使用的时候spring才会实例化,不用的时候不会实例化.
可以在一个bean标签里面写一个scope,值可以是singleton(单例) prototype(原型).singleton的意思是在spring容器中只会创建一次,在代码中多次实例化该对象也会指向同一个.prototype的意思是每次通过new就会实例化一个新的bean.
1.5自动注入.
我们一般会通过property来给一个bean(也就是对象)赋值,但是我们还可以通过自动注入方法来赋值.
byType自动注入
这个Person类有一个Wife类型的属性没有赋值,我们如果给它自动注入并且是byType,那么springIOC(spring容器)就会在该xml文件中寻找,如果发现一个bean的type刚好是Wife,那么会将该Wife自动注入进去.
byName自动注入
Peron类中有一个Wife类型的属性还没有赋值,我们通过byName给它进行自动注入,如果是byName的自动注入,那么springIOC会在该xml文件中寻找有没有一个bean的id为wife(这个wife是Wife类型的变量名),如果有就直接自动注入.
2.通过注解方法注册到IOc
@Controller:控制器,推荐给controller层添加此注解
@Service:业务逻辑,推荐给业务逻辑层添加此注解
@Repository:仓库管理,推荐给数据访问层添加此注解
@Component:给不属于以上基层的组件添加此注解
这四个对IOC来说都是一样的注解,写这么多是为了方便我们阅读.
在写了这些注解之后,我们还需要新建一个xml文件,配置一个东西,这些类才算真正的注入到IOC容器中.
注解自动注入(@Autowired):
通过Autowired可以将具体的personServiceImplements这个对象注入到IOC容器中.
这里会有一个问题,我们一般都是用接口来接受,比如这个PersonService就是一个接口,那么一个接口可能会被多个对象实现,如果我们想要使用具体的某一个类注入呢,该如何呢?
第一: 不要随便命名,使用这样的命名 "接口名 要使用的类名小写",这样就会自动匹配小写名的哪个对象了.
第二: 添加一个注解
@Qualifier注解里面填写要使用类的小写就可以将该类注入到IOC中.
@AutoWired 和 @Resource区别
1.AutoWired是spring提供的,@Resourece是jdk提供的.
2.AUtoWired是按照类型来匹配的.Resource是按照名字来匹配的.