spring

spring

spring的两大特性 (IOC,DI),AOP
ioc: 首先,我们将自己new的方式,变为了像工厂里拿的方式,我们不需要知道我们要对哪个对象进行操作,因为那是有工厂来进行提供,它会在我们需要的时候给我们,private A a=new b()这不是,private A a; 这是,我们知道我们要哪种,但不具体知道是谁,那是有工厂来决定.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这是我们自己定义的工厂来进行获取,配置文件是propertis,没上传,就是一个id 和全路径类名
这个要看懂

在这里插入图片描述

2 下面在spring工厂来进行获取
在这里插入图片描述
上面的xmls那些要去对应的spring文件查找,粘贴过来,这里配置了两个bean对象,下面来进行获取
在这里插入图片描述
ApplicationContext 三个常用的实现类
ClassPathXmlApplicationContext:要求配置文件必须在类路径下
FileSystemXmlApplicaContext:它可以加载磁盘下任意位置配置文件(必须要有访问权限)
AnnotationConfigApplicationContext它用于读取注解创建容器的

ApplicationContext 接口是在加载配置文件就创建对象(适合创建单例,因为容器只创建一次)
BeanFactory却是我们在拿对象的时候创建,(适合创建多例,这个是拿一次创建一个)

创建对象的三种方法
1,构造方法创建对象,前提必须要有空参构造方法
2,通过方法创建对象,就是一个方法返回值是一个对象类型,返回体就是new’一个对象
3和第二个一样,但是它是静态方法,为什么第二个省略了一步,是因为静态方法不需要创建对象就可调用 在这里插入图片描述
对象的生命周期和范围
在这里插入图片描述
1单例是由容器创建,所以
DI 依赖注入
1,说白了,就是把原有的设置对象属性方式,变为了xml设置
2,包括有构造注入,set属性注入
DI 构造方法注入和属性注入和集合还有Properties对象注入注入依赖注入
在这里插入图片描述
把xml配置对象,和设置属性的方式,用注解来实现
这里标签方式不好写,写了会被隐藏,所以就写一半
1bean>@Component ------beanID是当前类名且首字母小写,由于Spring分为三层所以对应三层都有注解,@Controller–控制器 @Service–业务层@Repository-数据访问层,注解属性Value用来标识BeanId,默认是该类类名且首字母小写
注解作用
@Acope用来指定该对象的范围,singleton(单例),prototype(多例)
@Autowired自动注入,先按照类型,如果有多个类型,则按BeanID注入
@Qualifier它必须和@AutoWired一起使用,在按照类注入的基础之上,在按照名称注入
@Reource它按照名称注入
@Value注入普通类型,和String类型
@PreDestroy修饰销毁方法
@PostConstruct修饰初始化方法
@Value注入普通类型,和String类型
@PreDestroy修饰销毁方法

接下来看一个案例,如何一步步的消除xml标签,下面是一个简单的两层,分别采用了xml的配置
在这里插入图片描述
在这里插入图片描述
这是第一种采用xml的方式配置

消除部分xmlBean的配置和依赖
1将自己的对象全部改为注解,数据访问层使用@Repository,业务逻辑层使用@Service,把业务逻辑层里的dao对象用@Autowired自动注入
:  Luke
我们就将xml全部消除,甚至可以删除该文件,效果一样,但是启动容器方式会发生变化
在这里插入图片描述
上面的QueryRunner配置还需加上一个@Scope注解且值为prototype,表明他是多例对象
一般我们自己的类,我们会去写注解Component,Controller…,来进行配置,但是导入的jar包里的类,你无法加注解,所以,就要采用配置类的方式来进行配置
注解作用
Configuration和bean.xml一样,这个注解修饰就是一个配置类,而bean.xml是配置文件,作用一样
Bean修饰方法,让该方法返回的对象放入容器中,BeanID是默认是该方法的返回值,当修饰的该方法有参数的时候,它会去容器中查找,查找方式和AutoWired一样

2:如果有多个配置类,那么该如何解决问题,我们可以直接写到AnnotationConfigApplicationContext(类名.class)中去,这样都会生效,但是这样做,会比较繁琐,这时候出现一个新注解,@import,我们可以吧它放在主配置类上,然后其余的就写在该注解里@import(类名.class…)一样可以生效

3如果一个方法配置,有两个方法提供,如下,那么我们可以加上@Qualifier注解来进行判断,为什么它这里可以单独使用那,因为方法参数那个位置,隐藏了一个@Autowired注解

在这里插入图片描述

3如果向上面那样配置,那么我们的数据库的配置,就被写死在代码中了
所以出现了,另一种方式
把配置文件写到类路径下,然后使用@Value注解加spring表达式来进行获取值
在这里插入图片描述
在这里插入图片描述
这时候,spring怎么知道我们的配置文件呢,所以出现了@PropertySource(“文件名字”)

如何选择
1,全xml方式,过于繁琐,全注解,好像也繁琐,个人认为注解加xml,最好
Authors
John
Luke
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值