`
charlesEye
  • 浏览: 6873 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

spring从头开始,笔记

 
阅读更多

2016-3-11

spring是个轻量级框架,可以简发web开发步骤,可以替代传统的EJB技术。

 

IOC容器:Inversion of control;

通过反射的方式在IOC容器中创建bean,所以要求bean必须有无参的构造函数

 

主要接口ApplictionContext,

主要实现类ClassPathXmlApplicationContext(从类路径加载文件),

FileSystemXmlApplicationContext(文件系统加载文件)

 

 

autowire(自动装配),byName(按照bean名字和setName属性查找),byType(按照bean类型查找)

 

bean的作用域:scope

1.singleton(默认)只创建一次实例。

2.prototype每次请求都创建实例。

3.request(每次Http请求都会创建一个bean实例,只在WebApplicationContext有效),

4.session(每创建一个HttpSession就会创建一个bean实例,只在WebApplicationContext有效)

 

Spring SpEL

Spring 表达式语言(简称SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言。

语法类似于 EL:SpEL 使用 #{…} 作为定界符,所有在大框号中的字符都将被认为是 SpEL

SpEL 为 bean 的属性进行动态赋值提供了便利

通过 SpEL 可以实现:

通过 bean 的 id 对 bean 进行引用

调用方法以及引用对象中的属性

计算表达式的值

正则表达式的匹配

字面量的表示:

整数:<property name="count" value="#{5}"/>

String 可以使用单引号或者双引号作为字符串的定界符号:<property name=“name” value="#{'Chuck'}"/> 或 <property name='name' value='#{"Chuck"}'/>

 

 

 

 

bean的生命周期

<bean init-method="" destroty-method=""> 

 

<!--导入属性文件  -->

 <context:property-placeholder location="classpath:db.properties"/>

 

<!-- bean后置处理器 -->

<!--实现BeanPostProcessor接口并实现两个方法:

Object postProcessBeforeInitialization(Object bean, String beanName) init-method之前被调用

Object postProcessAfterInitialization(Object bean, String beanName)  init-method之后被调用

 

配置 bean

配置形式:基于 XML 文件的方式;基于注解的方式;

Bean 的配置方式:通过全类名(反射)、通过工厂方法(静态工厂方法 & 实例工厂方法)、FactoryBean

 

 

 <!--通过静态工厂方法来配置bean,注意不是配置静态工厂方法实例,而是配置bean实例  

      class:静态工厂全类名

      factory-method:静态工厂方法

      constructor-arg:如果静态工厂方法要传参数,使用constructor-arg来配置

    -->

 <bean id="car1" class="com.t.spring.beans.factory.StaticFactory" 

    factory-method="getFactory">

   <constructor-arg value="audi"></constructor-arg>

 </bean>

 

<!--工厂实例  -->

    <bean id="carFactory" class="com.t.spring.beans.factory.InstanceFactory"></bean>

    

<!--实例工厂方法配置bean  -->

    <bean id="car2" class="com.t.spring.beans.factory.Car" 

    factory-bean="carFactory" factory-method="instanceFactory">

    <constructor-arg value="ford"></constructor-arg>

    </bean>

 

<!--通过FactoryBean配置bean实例,但实际返回的是getObject返回的实例  -->

   实现FactoryBean接口

public class CarFactoryBean implements FactoryBean<Car> {

	private String brand;
	
	public void setBrand(String brand) {
		this.brand = brand;
	}
	
	@Override
	public Car getObject() throws Exception {
		// TODO 自动生成的方法存根
		return new Car(brand,500000);
	}

	@Override
	public Class<Car> getObjectType() {
		// TODO 自动生成的方法存根
		return null;
	}

	@Override
	public boolean isSingleton() {
		// TODO 自动生成的方法存根
		return false;
	}

}
 

 

    <bean id="car" class="com.t.spring.beans.factorybean.CarFactoryBean">

      <property name="brand" value="BMW"></property>

    </bean>

 

(配置bean形式基于注解方式)

 

 spring特定组件:@Component、@Controller、@Service、@Repository

对于扫描到的组件, Spring 有默认的命名策略: 使用非限定类名, 第一个字母小写. 也可以在注解中通过 value 属性值标识组件的名称

 

当在组件类上使用了特定的注解之后, 还需要在 Spring 的配置文件中声明 <context:component-scan> :

base-package 属性指定一个需要扫描的基类包,Spring 容器将会扫描这个基类包里及其子包中的所有类. 

当需要扫描多个包时, 可以使用逗号分隔.

如果仅希望扫描特定的类而非基包下的所有类,可使用 resource-pattern 属性过滤特定的类,示例:

<context:component-scan base-package="com.t.spring.beans.annotation" 

         resource-pattern="repository/*.class">

    </context:component-scan> 

 

<context:include-filter> 子节点表示要包含的目标类

<context:exclude-filter> 子节点表示要排除在外的目标类

<context:component-scan> 下可以拥有若干个 <context:include-filter> 和 <context:exclude-filter> 子节点

 

<context:include-filter> 和 <context:exclude-filter> 子节点支持多种类型的过滤表达式:

类别:annotaion  (常用)

示例:com.t.XxxAnnotation 

说明:所有标注了XxxAnnotation的类。该类型采用目标类是否标注了某个注解进行过滤

 

类别:assignable   (常用)

示例:com.t.XxxService 

说明:所有继承或扩展XxxService的类。该类型采用目标类是否继承或扩展某个特定类进行过滤

 

类别:aspectj

示例:com.t..*Service+

说明:所有类名以Service结束的类及继承或扩展它们的类。该类型采用AspejctJ表达式进行过滤

 

类别:regex

示例:com.\t\.anno\..*

说明:所有com.t.anno包下的类。该类型采用正则表达式根据类的类名进行过滤

 

 

类别:custom

示例:com.t.XxxTypeFilter

说明:采用XxxTypeFilter通过代码的方式定义过滤规则。该类必须实现org.springframework.core.type.TypeFilter接口

 

 

 

 

组件扫描

<context:component-scan base-package="com.t.spring.beans.annotation" 

</context:component-scan>

 

相关属性:

<context:component-scan resource-pattern="repository/*.class" />

 

type=annotation

<!--排除指定的annotation组件  -->

<context:component-scan base-package="" >

<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>

</context:component-scan> -->

 

<!--包含指定的annotation组件  需要加上属性use-default-filters="false" 并且为false -->

<context:component-scan base-package="com.t.spring.beans.annotation"  use-default-filters="false">

    <context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/>

</context:component-scan> -->

 

type=assignable

<context:component-scan base-package="com.t.spring.beans.annotation"  use-default-filters="false">

<context:include-filter type="assignable" expression="com.t.spring.beans.annotation.repository.UserRepository"/>

</context:component-scan>

 

<context:component-scan base-package="com.t.spring.beans.annotation"  >

<context:exclude-filter type="assignable" expression="com.t.spring.beans.annotation.repository.UserRepository"/>

</context:component-scan>

分享到:
评论

相关推荐

    Springcloud学习笔记.md

    Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Spring...

    尚硅谷Spring6的笔记

    尚硅谷Spring6的笔记

    Spring Data JPA 笔记

    本笔记将深入探讨Spring Data JPA的核心概念、功能以及如何在实际项目中应用。 首先,我们需要理解JPA的概念。JPA是Java平台上的一个标准,用于管理关系数据库中的数据。它提供了一种面向对象的方式来操作数据库,...

    springcloud学习笔记.pdf

    Spring Cloud 学习笔记 本笔记主要介绍了从单体架构到微服务架构的演变过程,以及 Spring Cloud 中的微服务架构搭建。下面是本笔记的详细知识点总结: 一、单体架构 单体架构是指整个系统只有一个工程,打包往往...

    Spring Boot 进阶笔记.pdf

    Spring Boot 进阶笔记 Spring Boot 是由 Pivotal 团队提供的全新框架,旨在简化 Spring 应用的初始搭建和开发过程。它使用 “约定大于配置” 的理念,让项目快速运行起来。 Spring Boot 设计的目的是让开发者尽可能...

    springsecurity学习笔记

    在"springsecurity学习笔记"中,你可能会涉及以下主题: - Spring Security的基本配置,包括web安全配置和全局安全配置。 - 如何自定义认证和授权流程,比如实现自定义的AuthenticationProvider和...

    狂神springcloud学习笔记加代码

    狂神springcloud学习笔记加代码 笔记可以看:https://www.kuangstudy.com/bbs/1374942542566551554#header4 视频链接:https://www.bilibili.com/video/BV1jJ411S7xr

    马士兵老师spring框架学习笔记

    马士兵老师是知名的Java教育专家,他的Spring框架学习笔记深入浅出,对于初学者和进阶者来说都是一份宝贵的资源。这份笔记涵盖了Spring的核心概念、配置、AOP(面向切面编程)、DI(依赖注入)等关键知识点。 1. **...

    Spring框架学习笔记

    Spring的AOP模块支持声明式事务管理,开发者只需在配置中声明事务规则,无需在业务代码中显式处理事务开始、提交或回滚,降低了事务管理的复杂度。 八、Spring测试 Spring提供了丰富的测试支持,包括单元测试和集成...

    Spring Cloud 学习笔记.pdf

    Spring Cloud是一套微服务架构下的分布式系统解决方案,提供了在分布式系统环境下快速构建一些常见模式的工具,如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式...

    Spring学习笔记( spring视频笔记)

    Spring学习笔记( spring视频笔记)

    Spring6学习笔记

    Spring6学习笔记,师承老杜

    spring实用学习笔记(能够跟着实操的)

    spring实用学习笔记(能够跟着实操的)spring实用学习笔记(能够跟着实操的)spring实用学习笔记(能够跟着实操的)spring实用学习笔记(能够跟着实操的)spring实用学习笔记(能够跟着实操的)spring实用学习笔记...

    Spring全家桶知识笔记.pdf

    Spring全家桶是企业级应用开发中广受欢迎的解决方案,它包括了一系列的模块和工具,可以覆盖从表现层到业务层再到持久层的整个开发周期。Spring框架的核心特性包括轻量级、控制反转(IoC)、面向切面编程(AOP)、...

    尚硅谷周阳老师SpringCloud笔记

    【尚硅谷周阳老师SpringCloud笔记】是一份深入学习SpringCloud技术体系的教程资源,由知名教育机构尚硅谷的周阳老师编撰。SpringCloud作为微服务架构的重要框架,广泛应用于现代企业的分布式系统开发中。这份笔记...

    Spring学习笔记(精华全记录)

    ### Spring学习笔记(精华全记录) #### Spring框架概述 Spring框架源自Rod Johnson的个人项目,最初于2002年末发布。Spring并非一开始就作为一个完整的框架出现,而是从一个项目逐步发展而来。随着项目的成熟,...

    动力节点老杜Spring6,配套笔记PDF文件

    动力节点老杜Spring6配套笔记主要讲解了Spring框架的一些核心概念和最佳实践,特别是针对代码设计中的开闭原则(Open-Closed Principle, OCP)进行了深入探讨。在给出的代码示例中,我们可以看到一个简单的用户登录...

    spring高级源码笔记.pdf

    Spring框架是Java开发领域中的一个核心支柱,以其强大的功能和灵活性深受开发者喜爱。Spring的核心理念是依赖注入...在阅读过程中,做笔记是非常重要的,可以帮助理解和记忆,同时也可以作为未来解决问题的参考资料。

    Spring学习笔记(马士兵spring视频笔记).doc

    Spring学习笔记(马士兵spring视频笔记).docSpring学习笔记(马士兵spring视频笔记).docSpring学习笔记(马士兵spring视频笔记).docSpring学习笔记(马士兵spring视频笔记).doc

    Spring-IOC笔记

    spring-IOC的一些笔记心得

Global site tag (gtag.js) - Google Analytics