spring

Posted loyal888

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring相关的知识,希望对你有一定的参考价值。

1、什么是spring?
Spring是轻量级控制反转(IOC)和AOP面向切面的容器框架。他集合了java/javaee全功能的应用解决方案。简化了我们的开发。

2、什么是IOC?
IOC是控制反转的意思,就是控制权反过来交给spring来管理。

什么是控制权呢?
在类和类之间存在控制权,控制权指的是对象的创建和使用,
比如有类 A 和类 B,我们之前的做法是在 A 中调用 B,那么控制权就在 A 中,这样做的耦合度较高,
如果修改了 B,A 也要做相应修改。

引入 Spring 框架后,控制权由 spring 容器来负责。当 A 想使用 B 时,需要由 Spirng 容器通过
配置文件进行注入。这种思想就是 IoC(为了更好的理解,我们可以这样认为,对象创建和使用
的控制权转移到了 Spring 容器,由 Spring 容器来控制)

3、spring 依赖注入的方式有哪些?
spring 怎么实现对象的创建呢?答案就是DI。
DI:依赖注入

1)set方法注入 :

<!-- 注册userService -->
<bean id="userService" class="com.lyu.spring.service.impl.UserService">
    <!-- 写法一 -->
    <!-- <property name="UserDao" ref="userDaoMyBatis"></property> -->
    <!-- 写法二 -->
    <property name="userDao" ref="userDaoMyBatis"></property>
</bean>

2)构造方法注入:

 <!--通过构造方法注入-->
    <bean id="sayHelloAction" class="com.seecen.spring.SayHelloActionSpring">
        <constructor-arg ref="zhHello"></constructor-arg>
    </bean>

3)基于注解的注入:
a)开启注解:

<!--通过注解注入-->
    <context:component-scan base-package="com.seecen"></context:component-scan>

@Controller
public class SayHelloActionSpring {
    //引入的helloBean对象
    @Resource
    private HelloInterface helloBean;


常用的注解:
1)扫描bean组件的注解:
a)@Service 用于Service层
b)@Controller 用于Action层
c)@Repository 用于Dao层
d)@Component 用于其他组件

2)依赖注入的注解:
a)Resource 先按类型,后按名称来匹配
b)AutoWired 先按名称,后按类型来匹配

3)其他注解:
@Scope 等价于<bean scope="">
@PostConstruct 等价于<bean init-method="">
@PreDestroy 等价于<bean destroy-method="">

4、spring对象的生命周期

1)对象什么时候被创建?
spring中的对象默认是不开启延迟加载的,即spring容器一启动,则会创建所有的对象。(好处:只要项目有配置问题可以第一时间发现。启动即会报错,而不需要等到运行)。可以配置:lazy-init="true"

2)对象创建的方式是什么?是单例的吗?还是多实例的?
(验证方式:创建两个对象,比较是否相等)

scope 属性用于设定的创建方式和生命周期
1)single:默认单例
2)prototype: 多实例的
3)request :bean的生命周期与request相同
4)session :与session相同
5)global Session :application

3)对象什么时候被销毁?
bean 对象在 spring 容器关闭的时候被销毁。
Bean 对象的初始化和销毁
init-method 属性用于指定初始化方法
destroy-method 属性用于指定销毁方法,仅适用于 singleton 模式

<bean id="mybean"
lazy-init="true"
scope="prototype"
init-method="myinit"
class="tarena.demo3.MyBean"></bean>

 

以上是关于spring的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot:thymeleaf 没有正确渲染片段

What's the difference between @Component, @Repository & @Service annotations in Spring?(代码片段

spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段

Spring Rest 文档。片段生成时 UTF-8 中间字节无效 [重复]

解决spring-boot启动中碰到的问题:Cannot determine embedded database driver class for database type NONE(转)(代码片段

一张图帮你记忆,Spring Boot 应用在启动阶段执行代码的几种方式