Java基础框架

1.Spring是什么?

Spring是一个Service 层的框架,可以整合许多其他框架进行工作。

Spring的主要技术是IOC(控制反转)和AOP(面向切面编程)。

①什么是控制反转?

简单来讲就是将对象创建的权利和对象生命周期的管理过程交给Spring框架来处理,从而在开发的过程中不再需要关注对象的创建和生命周期的管理,而是需要时由Spring框架来提供,这个由Spring框架管理对象创建和生命周期的机制叫做控制反转。在创建对象的过程中,Spring可以通过对对象属性的进行设置,这个过程称之为依赖注入,也就是DI。

②IOC的实现原理

在创建一个Spring容器时,Spring会去解析指定的xml文件,当解析到其中的<bean>标签时,会根据其中的class属性指定类的全路径名,通过反射创建该类的对象,并将该类存入内置的Map中进行管理,其中键就是该标签的id值,值就是该对象。之后,通过getBean方法来从容器中获取对象时,其实就是根据传入的条件在内置的Map中进行匹配,如果有则返回,没有则抛出异常。

③IOC获取对象的方式:

通过context.getBean()方法获取bean时有两种方式:

传入id值,传入class类型

通过class方式获取bean时,若同一个类匹配多个bean,则在获取时因为无法确定到底要获取哪个bean会抛出异常,同时,在获取bean时,若找不到该类型的bean还会去检查是否存在该类型的子孙类型bean,若有,则返回若找不到或找到多个则抛出异常,符合面向对象多态的特性,而id是惟一的,不存在这样的问题,所以尽量使用id。

④Spring创建对象的方式

通过类的无参构造方法创建对象:

通过指定构造器创建对象

通过工厂创建对象

2.单例和多例

Spring默认采用单例模式,减少了对象的创建,从而减少了内存的消耗,但在开发过程中是存在多例的需求的,Spring也提供了选项可以将bean设置为多例。

bean在单例模式下,spring容器启动时解析xml发现该bean标签后,直接创建该bean对象并存入map中,此后无论调用多少次getBean()获取该对象时返回的都是一个对象,此对象一直被spring容器持有,直到容器退出时,对象被移出容器。

bean在多例模式下,spring在解析时,只是将bean进行管理,并不会创建对象,每次调用返回的都是一个新的对象,这个对象spring容器并不会拥有,何时销毁取决于用户程序本身。

3.懒加载机制:

可以规定指定的bean不在启动时就立即创建,而是在后续第一次用到时才创建,从而减轻启动过程中对时间和内存的消耗。懒加载机制只对单例bean有作用,对于多例bean设置懒加载是没有意义的,懒加载只是延后了对象创建的时机,对象仍是单例的。

①为指定的bean配置懒加载:<bean id ="" class="" lazy-init=''true"></bean>

②为全局配置懒加载:<default-lazy-init="true">

如果同时设定全局变量和指定变量,且配置不相同,则局部配置覆盖全局配置

4.自动装配:

自动装配就是要根据要设置的javabean属性的名字或类型到spring中自动寻找对应id或类型的bean进行注入设置,从而省去依次配置的过程,简化了配置。

5.spring注解方式实现IOC和DI

spring除了默认的使用xml配置文件的方式实现配置之外,也支持使用注解方式实现配置,这种方式效率更高,配置信息清晰,代码在哪对应的配置就在哪,方便开发阶段进行修改。

①spring注解方式实现IOC

a、导入开发包;

b、编写配置文件,并导入context约束;

c、开启包扫描;<context:component-scan base-package=""></context:component-scan>

d、使用注解注册bean:在配置的包中的类上使用@Component注解,则这个类会自动被注册为bean

e、bean的id;通常情况下注解注册bean实用类名首字母小写为bean的id,但是如果类名的第二个字母为大写则首字母保留原样。

f、也可以通过在@Component中配置value属性,明确的指定bean的id;

g、在bean中的属性上通过@Autowired实现自定义bean类型的属性注入

h、当spring解析到@Component注解时,创建当前类的bean在spring容器中进行管理,在创建bean的过程中发现了@Autowired注解,会根据当前的bean类型,寻找在spring中是否存在该类型的bean,找到直接注入,找不到则会检查其子孙类,实现类是否存在,若存在唯一的则自动注入,若没有找到或者找到多个无法注入,则会按照属性名对应的id去查找对应的bean,若存在则注入,否则抛出异常。

I、其他的一些注解:@Scope(value=“prototype”),配置是单例还是多例,默认为单例

                                  @Lazy懒加载机制

                                   @PostConsrtuct修饰某个方法,将该方法声明为初始化方法,对象创建后立即执行。

                                    @PreDestroy修饰某个方法,将该方法声明为销毁的方法,对象销毁前调用的方法。

                                     @Controller(控制层,一般用在web层);

                                     @Service(业务访问层,一般用在service层);

                                     @Respository(数据访问层,一般用在dao层);

                                     @Component(通用的注解)四个功能完全相同,都是用来修饰类,将类声明为Spring管理的bean的。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值