Spring基础语法

SpringMVC框架
在这里插入图片描述
在这里插入图片描述

  1. JavaBean
    Bean:豆子,豆荚 符合一定规范的(结构雷同)简单Java对象
  1. 必须有包(package)
  2. 必须有无参数构造器
  3. 方便子类的继承和创建
  4. 方便利用无参数构造器创建对象
  5. 实现序列化接口
  6. 方便底层自动调用对象的序列化功能
  7. 属性有get和set访问方法
  8. get set 方法声明的属性称为“Bean属性”
  9. 类中声明的实例变量称为“对象属性”
     符合上述规范类,创建的具体对象称为JavaBean, 也称为简单Java对象,有时候也称为POJO对象。
     Spring建议,在Spring中使用JavaBean规范的对象。 但是Spring也支持不规范的Java对象。
     如上规范不是语法规范,可以不严格遵守。但是大多数企业都要求执行上述规范。
  1. Spring核心功能IOC/DI
    IOC控制反转: 指对象的创建和控制权利由Spring控制,用户程序只从Spring获取使用对象。 用户程序不再负责创建管理对象。
    DI依赖注入:指在需要对象时候,由当前环境创建管理对象,并且注入到使用者手中。
    Spring核心功能:
  1. Spring 内部提供了一个JavaBean对象容器(集合)由于创建和管理对象。
  2. 需要提供配置文件(xml文件),Spring根据配置文件创建和管理对象。
    A. 导入Spring框架API

    org.springframework
    spring-context
    4.3.10.RELEASE

    B. 创建一个XML文件,告诉Spring创建呢些对象
  3. <?xml version="1.0" encoding="UTF-8"?> http://www.springframework.org/schema/beans”
    xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance
    xmlns:context=“http://www.springframework.org/schema/context
    xmlns:jdbc=“http://www.springframework.org/schema/jdbc
    xmlns:jee=“http://www.springframework.org/schema/jee
    xmlns:tx=“http://www.springframework.org/schema/tx
    xmlns:aop=“http://www.springframework.org/schema/aop
    xmlns:mvc=“http://www.springframework.org/schema/mvc
    xmlns:util=“http://www.springframework.org/schema/util
    xmlns:jpa=“http://www.springframework.org/schema/data/jpa
    xsi:schemaLocation=" http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.2.xsd
    http://www.springframework.org/schema/jdbc
    http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
    http://www.springframework.org/schema/jee
    http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
    http://www.springframework.org/schema/data/jpa
    http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
    http://www.springframework.org/schema/util
    http://www.springframework.org/schema/util/spring-util-3.2.xsd">
  1. <bean id="obj1" class="day01.HelloWorld"/> </beans>

C. 启动Spring容器,Spring会根据XML文件创建对象。
ClassPathXmlApplicationContext ctx;
@Before //在测试案例之前执行
public void initCtx() {
//初始化Spring容器, 需要提供配置文件
//配置文件默认位置为 resources
ClassPathXmlApplicationContext ctx =new ClassPathXmlApplicationContext(“applicationContext.xml”);
}
@After //在测试案例之后执行
public void destroy() {
ctx.close(); //关闭Spring容器,会销毁Bean对象
}

D. 从Spring获得创建好对象。
public void testHelloWorld() {
//Spring中就已经创建了 HelloWorld对象,利用
//ID获取Spring中创建的对象
HelloWorld obj=(HelloWorld)ctx.getBean(“obj1”);
//检查是否成功创建了对象
System.out.println(obj);
}
E. ;

  1. Spring 容器
    Spring 核心功能是管理JavaBean对象,由于其内部缓存了JavaBean对象,所以形象称为Spring为 JavaBean 容器。
  1. Spring为 JavaBean 容器。
  2. 由于Spring可以创建JavaBean对象,所以称为BeanFactory(JavaBean的工厂)
  3. 后来Spring在BeanFactory基础上扩展了接口 ApplicationContext。
    • 一般常用是 ApplicationContext
    • Application 应用,Context 上下文环境
    • 实际常用实现类是 ClassPathXmlApplicationContext
    • ClassPathXmlApplicationContext 是Spring容器、Bean容器也是Bean工厂
  1. Spring 容器功能使用
  1. Spring 配置文件用于声明JavaBean对象
  2. Spring配置文件中 id 属性和name属性功能一样

常用的属性是id

  1. Spring容器提供了多个获取Bean对象的方法:
    //返回是Object类型需要进行类型转换
    Object bean = ctx.getBean(“BeanID”)
    //返回具体类型的Bean对象
    类型Object obj = ctx.getBean(“BeanID”, Object.class)
  1. Spring 创建对象的方式
  1. 利用无参数构造器创建对象
    认情况下,Spring会自动调用(反射调用)无参数构造器创建对象。
  2. 利用静态工厂方法创建对象, Spring可以利用工厂方法来创建对象
    “工厂方法” 创建对象方法称为工厂方法
    //配置文件:

<bean id=“cal1” class="java.util.Calendar"factory-method=“getInstance”/>
//测试案例:
public void testCalendar() {
//静态方法getInstance(),来创建Calendar对象
//创建对象的静态方法称为,静态工厂方法。
//Calendar cal = Calendar.getInstance();
//Spring支持静态工厂方法创建对象
//Spring可以去调用静态工厂方法,将创建的对象
//放到Spring容器管理起来,提供给外部使用。
Calendar cal1 = ctx.getBean(“cal1”, Calendar.class);
System.out.println(cal1);
}

  1. 利用对象工厂方法创建对象
    利用对象工厂方法创建对象
  • 利用对象提供的工厂方法创建另外一个对象

<bean id=“date1” factory-bean="cal1"factory-method=“getTime”/>
public void testFactoryBean() {
//测试利用Spring调用Bean对象的工厂方法创建对象
Date date = ctx.getBean(“date1”, Date.class);
System.out.println(date);
}
Spring 功能强大,提供了多种创建对象的方式。

  1. 单例与多例
    单例的特点:
  1. 资源占用少, 一个对象可以被复用。
  2. 并发访问时候,单例对象的属性可能出现并发访问问题。
    多个实例:
  3. 每个实例都有一组数据,资源占用高,可以保持多个状态
  4. 如果每个线程访问一个实例,就没有线程并发安全问题
  5. >>>>>> Spring默认情况下按照单例管理对象!
  1. 对象的生命周期管理
  • Spring支持对象的生命周期管理方法。
  • 生命周期管理方法用于初始化,或者回收资源。
  • 默认情况下是单例对象,Spring利用属性调用初始化和销毁方法
  • <bean id="demo"	class="day01.DemoBean"init-method="init" destroy-method="destroy"/>
    >>>>>> 关闭容器时候调用 销毁方法。
    >>>>>> 容器启动时候创建对象调用其初始化方法
    4.	多例对象时候,Spring只在创建对象时候调用init方法。 不会调用销毁方法
    <!-- 测试对象生命周期管理方法 -->
    <bean id="demo"	class="day01.DemoBean"scopt="prototype" init-method="init" destroy-method="destroy"/>
    >>>>>> getBean时候,创建对象并且调用init方法
    >>>>>> 如果需要执行销毁方法,只能手动执行
    
  1. 懒惰实例化JavaBean
    lazy: 懒惰,按需实例化
    lazy-init=“true”: 在第一次请求getBean时候实例化对象。
  1. 默认情况下Spring对于单例对象,容器启动时候立即实例化。优点是在使用对象时候,对象已经实例化,可以减少延迟,提高性能。 会占用系统资源。
  2. lazy-init=“true” 属性,以后按需实例化,资源占用低,获取对象慢。
  3. 对于一定使用的对象,建议采用立即实例化规则
  4. 对于使用少的对象建议采用懒惰实例化
  5. Spring默认规则是 立即实例化
  1. IOC/DI
    DI 的优势:解耦
    紧耦合:软件组件之间是紧密依赖,很难拆分
    松耦合:软件组件之间是松散依赖,随时可以更换
    解耦:将软件组件从紧耦合转换为松耦合关系。
  2. Spring 注解
    A. Spring 提供了一系列注解,用于管理JavaBean。
  1. 注解是Java语法,被Java编译器检查,可以减少配置错误
  2. 注解提供了默认支持功能,默认情况下会自动完成注入功能
  3. 注解和XML配置可以混合使用。
  4. 自己写的类使用注解
  5. 别人写的API使用XML配置
    利用Spring注解创建Bean
    @Component //放到类上边----默认的BeanID为 “demoBean”
    Spring 会自动查找注解@Componment 找到后自动实例 DemoBean 并且自动分配Bean的ID: demoBean
    B. 需要在XML配置文件中开启注解扫描功能。
    <context:component-scan base-package=“day02.bean”/>

base-package=“day02.bean” 指定Spring扫描组件的包范围
C. Spring 支持多个组件注解
这些注解功能是一样的,建议按照组件层次使用组件组件。
@Component 通用组件
@Named 通用组件
@Repository 持久层组件
@Service 业务层组件
@Controller 控制器
@Scope(“prototype”) //创建多个对象实例
其中@Named来自 javax.inject 包,需要利用Maven导入

D.	管理对象的声明周期
@PostConstruct 构造器之后执行方法
@PreDestroy 在销毁之前执行的方法
导入注解包
<dependency>
	<groupId>javax.annotation</groupId>
	<artifactId>javax.annotation-api</artifactId>
	<version>1.3.2</version>
</dependency>
<dependency>
	<groupId>javax.inject</groupId>
	<artifactId>javax.inject</artifactId>
	<version>1</version>
</dependency>

E. 配置Spring 开启注解扫描功能
<context:component-scan base-package=“servlet.demo16(包目录)” />
F. 注解注入属性

  1. @Autoware 和 @Resource 功能一样

  2. 注解采用默认规则自动注入

    1. 先按照 名字规则,自动注入
    2. 如果名字不匹配,就按照类型自动注入
  3. 注解可以标注在 Bean属性 和 实例变量上

  4. 注解必须经过Spring的解析出来才能生效。
    G. 标注Bean属性
    @Autowared 和 @Resource 注解不仅仅能够标注实例变量,还能标注Bean属性方法,实现Bean属性注入。
    H. 混合使用 注解和xml文件
    可以用声明bean组件注入到注解标注的属性,也可以将注解声明的Bean注解注入到 属性中。
    I. @Value
    @Value用于为属性注入基本值,经常与Spring表达式配合实现读取配置文件
    J. Spring MVC
    Spring在Spring基础之上提供了Spring MVC 框架,Spring + Spring MVC + MyBatis 合称 SSM 框架。

  5. Web框架是Web软件的半成品,Web框架封装了Web应用程序中大部分技术细节,利用Web框架开发软件快速高效。 使用广泛。

  6. Web框架不是必须品,Web软件完全可以不采用Web框架。有些企业会创建自己的框架级解决方案。

  7. 使用Web框架必须按照Web的约定使用才能做到事半功倍的效果。
    K. 使用Spring MVC 步骤

  8. 导入Spring MVC相关包

  9. 配置前端控制器

  10. 编写配置文件

    1. 配置视图解析器
<!-- 扫描控制器组件 -->
   <context:component-scan base-package="controller"/>
   <!-- 通知HandlerMapping,处理RequestMapping注解 -->
   <mvc:annotation-driven/>
   <!-- 视图处理器 
   当控制器返回视图名称时候,利用视图解析器拼接
   前后缀,找到视图对象
   如: 控制器返回 view 时候,拼接前后缀以后
   /WEB-INF/jsp/view.jsp 用于定位jsp文件 -->
   <bean id="viewResolver" 
   class="org.springframework.web.servlet.view.InternalResourceViewResolver">
   <!-- prefix: 前缀, suffer:后缀-->
   <property name="prefix" value="/WEB-INF/jsp/"/>
   <property name="suffix" value=".jsp"/>
   </bean>





12. 编写子控制器    @Controller
            		public class HelloController {
            			@RequestMapping("/demo.do")
            			public String execute() {
            				return "view"; // view.jsp
            			}	
            	}
  1. 编写视图页面

12) Spring AOP
a) 面向切面的编程主要应用于:在某种执行流程中产生切面,当程序的执行流程执行到切面时,就会执行切面中指定的代码。开发者可以自由的指定切面的切入点、切面的应用范围、切面中需要执行的任务。切面应用到某种执行流程中时,并不需要修改原流程中涉及的任何代码。
b) 面向切面的编程并不是Spring所独有的,只是Spring提供了一种更加快捷的创建、管理切面的做法。

1.	使用时添加新的依赖:
<dependency>
	<groupId>aspectj</groupId>
	<artifactId>aspectj-tools</artifactId>
	<version>1.0.6</version>
</dependency>
<dependency>
	<groupId>org.aspectj</groupId>
	<artifactId>aspectjweaver</artifactId>
	<version>1.9.2</version>
</dependency>
  1. 然后,创建切面类并编写切面中的方法:

    @Aspect
    @Component
    public class ServiceRuntimeAspect {
    @Around(“execution(* cn.tedu.store.service.impl..(…))”)
    public Object a(ProceedingJoinPoint pjp) throws Throwable {
    // 记录开始时间
    long start = System.currentTimeMillis();
    // 执行切面应用到的方法
    Object result = pjp.proceed();
    // 记录结束时间并统计耗时
    long end = System.currentTimeMillis();
    System.err.println(“耗时:” + (end - start) + “ms”);
    // 返回
    return result;
    }
    }

c) 切面类应该添加@Aspect注解表示这是一个切面类,添加@Component注解,使得它被Spring管理。
d) 如果切面是在某方法之前和之后都需要执行的,则使用@Around注解,如果只在某方法之前执行,则使用@Before,如果只在某方法之后执行,则使用@After,一般,推荐使用@Around
e) 在注解中的"execution(* cn.tedu.store.service.impl.*.*(..))"表达式表示该切面应用到cn.tedu.store.service.impl包中的所有类(第1个星号)的所有方法(第2个星号),且方法的参数是任意的(后续的括号和2个小数点)。
f) 切面方法应该添加ProceedingJoinPoint pjp参数,用于执行切面所应用到的方法,当需要执行所应用到的方法时,调用该参数对象的proceed()方法即可,需要注意的是:必须获取此次调用的返回值,并作为当前切面方法的返回值,否则,切面应用到的方法将不会返回值。

  1. ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值