Spring复习

如何学习Spring

       资源网址
       Spring入门到精通p26

Spring简介

        Spring是一个开源框架
    IOC控制反转+AOP面向切面
    包含并管理应用对象的配置和生命周期,这种意义上是一种容器
    为复杂的javaEE开发的春天

什么是框架

    1.是什么
        维基百科
        制定好一套规范或者思想,在该规则下工作
    2.特点
        半成品
        封装了特定的处理流程和逻辑
        成熟不断改进的软件
    3.与类库的比较
        框架一般封装逻辑。高内聚
            类库是松散的工具组合
        框架专注一个领域
            类库更倾向与通用

IOC配置和注解

    1.接口
        用于沟通的中介物的抽象化
        实体把自己提供给外界的一种抽象化说明,用以由内部操作分离处外部沟通的方法,使其能被修改内部而不影响外界其他实体的交互方式
        对应JAVA接口即声明
            声明方法那些时公开的
        java8   中可以拥有方法体
    2.面向接口编程
        结构设计 中,分清层次及调用关系,每层只向外提供一组功能接口,各层之间依赖接口而并非实现类
        接口的实现的变动不影响各层间的调用,这一点在公共服务中尤为重要
        面向接口编程的接口用于隐藏具体实现和实现多态的组件
    3.什么是IOC
        控制反转,控制权的转移,应用程序本身不负责依赖对象的创建和维护,而是由外部容器负责创建和维护
        DI:依赖注入时一种实现方式
        目的
            创建对象并且组装对象之间的关系
        获得依赖对象的过程被反转了
            过程交给外部容器控制了
            IOC容器运行时动态的将某种依赖关系注入到对象中
    4.Spring的Bean配置
        所有的对象称之为bean
        applicationContext.xml
            <bean>标签
                id
                    对象的名称
                class
                    对应的类
    5.Bean的初始化
        涉及的基础包
            org.springframework.beans
            org.springframework.context
        BeanFactory提供配置结构和基本功能,加载并初始化Bean
        ApplicationContext保存了Bean对象并且在Sping中广泛应用
        方式  
            本地文件
                FileSystemXmlAplicationContext context=new FileSystemXmlApplicationContext("文件所在的路径");
            ClassPath
                ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("classpath:spring-context.xml");
            Web应用中依赖servlet或者listener
            listener
                <listener><listener-class>org.springframework.web.context.ContextLoaderListener<listener-class></listener>
            servlet
                <servlet><servlet-name>context</servlet-name><servlet-class>org.springframework.web.context.ContextLoaderServlet<servlet-class><load-on-startup>1</load-on-startup></servlet>
    6.Spring的常用注入方式
        是指在启动Spring容器加载bean配置的时候,完成对变量的赋值行为
        注入方式
            设值注入
                设置set注入
                <bean><pr name="类里面的名称"  ref="要获取的类对象,所映射的bean ID "></bean>
            构造注入
                <bean><constructor-arg name="类里面的名称"  ref="要获取的类对象,所映射的bean ID "></bean>
                设置构造函数

Bean

1.Bean配置项
        Id
            整个ioc的唯一标识
        Class
            实例化的那个类
                必须的
        Scope
            作用域
        Constructor-arguments
            构造参数
        Properties
            设置注入
        Autowiring mode
            自动装配
        lazy-initialization mode
            懒加载
        Initialization/destruction method

2.作用域(同一个容器中)

        singleton
            单例,指一个Bean容器只存在一份
        Prototype
            每次请求创建新的实例,destroy方式不生效
        request:每次http请求创建一个实例且仅在当前request内有效
        session  同上,但是session有效
        global session:给予protlet的web中有效,在web中的话,和session一样

3.生命周期

        定义
            定义一个id
        初始化
            加载,并且配置
                方法一:实现InitializingBean接口,覆盖afterPropertiesSet方法
                方法二:配置<bean>ini-method属性
        使用
            取出一个bean
        销毁
            销毁这个更容器创建所有的Bean实例
        配置全局的初始化和销毁方式
            default-init-method
            default-destory-method
    Awae接口
        介绍
            Spring中提供了以Aware结尾的接口,实现了的接口bean在初始化后,可以获取相应的资源
    自动装配
        自动装配的类型
            NO: 不做任何操作: 这时默认的操作
            Byname: 根据属性名自动装配,此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配
            byType:如果一个容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配;如果存在多个该类型bean,那么抛出异常,并且指出不能使用byType方式进行自动装配;如果没有找到相应匹配的bean,则设么事都不发生
            Constructor:与bytYpe类型相似,不过应用于构造函数
        使用
            beans里面声明default-autowire="装配类型"
    resource
        介绍
            针对资源的统一接口
            UrlResource:URL对应的资源,根据一个URL地址即可构建
            ClassPathResource:获取类路径下的资源文件
            FileSystemResource:获取文件系统里面的资源路径
            ServletContextResource:ServletContext封装的资源,用于访问ServletContext环境的资源
            InputStreamResource:针对输入流封装的资源
            ByteArrayResource:针对字节数组封装的资源
        ResourceLoad接口
            提供了获取类路径的类

Bean管理的注解实现及例子

    Classpath扫描与组件管理
    类的自动检测与注册Bean
        spring那个可以自动检测类上带有注解的bean,并且提供给bean理解
        <context:annotation-config/>

    <context:component-scan>包含了<context:annotation-config/>
        base-package  存放要扫描的类
        scoped-proxy="interface"/>
            代理方式
            no
            interface
            targetClass
    @Component
        通用注解
    @Repository
        通常用于注解DAO类,持久层
    @Service
        注解Service类,服务层
    @Controller
        注解Controller类,控制层
    @Required(单词的意思必须的)
        只适用于bean属性的setter方法
        这个注解仅仅表示,受影响的bean属性必须在配置时被填充,通过在bean定义或通过自动装配一个明确的属性值
    @AutoWired(自动的进行装备)
        传统的注解setter方法
        可以用于成员变量和构造器构造器
        到不到合适的bean时会抛出异常
            解决方法
            注解属性required=true
        解析那些众所周知的依赖接口
        由Spring的BeanPostProcessor
        子主题 6
    @Qualifier
        按类型自动装配可能多个bean实例的情况,可以使用Spring的@Qualifier注解缩小范围 ,也可以指定单独的构造器参数或者方法的参数
        也可以注解集合类型
    @Resource
        通过唯一名称引用集合或者Map的bean
        适用于成员变量
        有一个name属性,、并且默认Spring解释该值最为被注入的bean的名称
        如果没有显式的指定name,默认的名称从属性名字或者setter方法中获取
    @Scope
        作用域注解
    @Order注解  
        可以让数组有序
        属性value =1
        也可以实现Order这个接口
    @Bean
        标识一个用于配置和初始化一个由SpringIOC容器管理的新对象的方法,类似XML配置的bean
        可以在Spring的@Component注解的类中使用@Bean注解任何方法,仅仅是可以
        注意:如果没有注解name 那么默认使用方法的名称
        如果是用注解的init 和destroy要在返回的类中定义方法
    <!-- 引入外部属性文件 -->
        <context:property-placeholder location="classpath:jdbc.properties"/>
        <!-- 配置C3P0连接池: -->
            <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="${jdbc.driver}"/>
            <property name="jdbcUrl" value="${jdbc.url}"/>
            <property name="user" value="${jdbc.user}"/>
            <property name="password" value="${jdbc.password}"/>
            </bean>
    @ImportResource(引入资源xml)
        @Value(“${jdbc.url}”)
        例子
            @ImportResource("classpath:applicationContext.xml")
            @Value("${url}")
                private String url;
                @Value("${username}")
                private String username;
                @Value("${password}")
                private String password;
    基于泛型的自动装配
    有个name属性显示注解后的bean名称

JSR330标准注解

    需要依赖包javax.inject包
    maven的引入方式
        <dependency>
        <groupId>javax.inject</groupId>
        <artifactId>javax.inject<artifactId>
        <version>1</version>
        </dependency>
    JSR支持
        @PostConstruct 
            被这个注解注解的方法会在容器加载之前执行它
        @PreDestroy
            会在被销毁之前执行他
        @Named
            与Component是等效的
            使用特定的名称时 这个注解bijiaohao
        @Inject
            类似于@Resource

AOP

    什么是AOP
        Aspect Oriented Programming 的缩写,意思为面向切面编程
        通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术
        主要功能能,日志记录,性能统计,安全控制,事务处理,异常处理
    切面
    AOP的实现方式(当以service为结尾)
        预编译
            AspectJ
        运行期动态代理
            SpringAOP
            JboosAOP
    Spring的AOP
        概念
            切面Aspect
                一个关注点的模块化,这个关注点可能会横切多个对象
            连接点 JoinPoint
                程序执行过程中某个特定的点
            通知Advice
                在切面上某个特定的链接点上执行的动作
            切入点Pointcut 
                匹配连接点的断言,在Aop中通知和一个切入点表达式关联
            引入Inroduction   
                在不修改代码的前提下,为类添加新的方法和属性
            目标对象 Target Object
                被一个切面或者多个切面通知的对象
            AOP代理 AOP proxy
                AOP框架创建的对象,用来实现切面七月
            织入Weaving
                把切面连接其他的应用程序类型或者对象身上去,并创建一个被通知的对象
                分为编译时织入,类加载时织入。执行时织入
        通知Advice的类型
            前置通知Before advice 
                在某连接点之前执行的通知,但不能阻止连接点前的执行(除非他抛出一个异常)
            返回后通知After returing adice
                在某连接点正常完成后执行的通知
            抛出异常后通知(After throwing)
                在方法抛出异常退出时执行的通知
            后通知(After(finally)advice)
                在某连接点退出的时候执行的通知
            环绕通知(Around Advice)
                包围一个连接点的通知
                异常需要抛出
        用途
            提供了声名式的企业服务,特别是EJB的替代服务的声明
            允许用户定制自己的方面,以完成OOP与AOP的互补使用
        实现
            纯java实现,无需特殊的编译过程,不需要控制类加载器层次
            目前只支持方法执行连接点,通过Spring Bean 方法
            不是为了提供最完整的AOP实现,而是侧重提供一种AOP实现与Spring IoC容器之间的整合,用于帮助解决企业应用中的常见问题
            Spring AOP 不会与AspectJ竞争,从而提供综合全面的AOP解决方案
            pring AOP 默认使用标准的javaSE动态代理作为AOP代理
            如果一个业务对象没有实现ige接口那么实现CGLIB代理
    Schema-basedAOP
        介绍
            Spring的所有的切面和通知器必须放在一个<aop:config>内(可以配置包含多个<aop:config>元素)
            每一个<aop:config>可以包含pointtcut,advisor和aspect元素
            他们必须按照这个顺序进行声明
            使用了Spring的自动代理
        pointcut属性
            execution(public * *(..))
                切入点为执行所有的public方法时
            execution(* set *(..))
                切入点为执行所有的set开始的方法时
            execution(* com.xyz.service.AccountService.*(..))
                切入点为执行AccountService类的所有方法时
            execution(** com.xyz.service.AccountService.*(..))
                com.xyz.service切入点为com.xyzservice包下的所有方法时
            execution(* com.xyz.service.AccountService.*(..))
                com.xyz.service切入点为com.xyzservice包下的所有方法时及其子方法
            within(com.xyz.service.*)
                用于匹配指定类型内的方法执行
            this()
                匹配当前AOP代理对象类型的执行方法
    Sprng AOP API
        AOP的基础 不得不了解
    AspectJ
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
springboot学习笔记 spring基础 Spring概述 Spring的简史 xml配置 注解配置 java配置 Spring概述 Spring的模块 核心容器CoreContainer Spring-Core Spring-Beans Spring-Context Spring-Context-Support Spring-Expression AOP Spring-AOP Spring-Aspects Messaging Spring-Messaging WEB Spring-Web Spring-Webmvc Spring-WebSocket Spring-Webmvc-Portlet 数据访问/集成(DataAccess/Intefration) Spring-JDBC Spring-TX Spring-ORM Spring-OXM Spring-JMS Spring的生态 Spring Boot Spring XD Spring Cloud Spring Data Spring Integration Spring Batch Spring Security Spring HATEOAS Spring Social Spring AMQP Spring Mobile Spring for Android Spring Web Flow Spring Web Services Spring LDAP Spring Session Spring项目快速搭建 Maven简介 Maven安装 Maven的pom.xml dependencies dependency 变量定义 编译插件 Spring项目的搭建 Spring Tool Suite https://spring.io/tools/sts/all IntelliJ IDEA NetBeans https://netbeans.org/downloads/ Spring基础配置 依赖注入 声明Bean的注解 @Component组件,没有明确的角色 @Service在业务逻辑层(service层) @Repository在数据访问层(dao层) @Controller在展现层(MVC→SpringMVC) 注入Bean的注解 @Autowired:Spring提供的注解 @Inject:JSR-330提供的注解 @Resource:JSR-250提供的注解 Java配置 @Configuration声明当前类是一个配置类 @Bean注解在方法上,声明当前方法的返回值为一个Bean AOP @Aspect 声明是一个切面 拦截规则@After @Before @Around PointCut JoinPoint Spring常用配置 Bean的Scope Singleton Prototype Request Session GlobalSession SpringEL和资源调用 注入普通字符 注入操作系统属性 注入表达式云算结果 注入其他Bean的属性 注入文件内容 注入网址内容 注入属性文件 Bean的初始化和销毁 Java配置方式 注解方式 Profile @Profile 通过设定jvm的spring.profiles.active参数 web项目设置在Servlet的context parameter中 事件Application Event 自定义事件,集成ApplicationEvent 定义事件监听器,实现ApplicationListener 使用容器发布事件 Spring高级话题 Spring Aware BeanNameAware BeanFactoryAware
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值