目录
一、三大框架基本结构
-1.框架的分类
-2.框架调用流程图
二、 Spring介绍
-1.概述
三、Spring-IOC(Inversion of Control)
-1.IOC介绍
-2.IOC项目创建
-3.Spring配置开发
1.创建User类
2.编辑spring.xml配置文件
3.编辑测试API
4.关于Spring容器
5.了解反射源码
-4.Spring 注解开发
1.关于Spring注解开发的说明
2.创建springdemo3_anno项目
3.编辑User类
4.编辑配置类
5.编辑测试类
-5.关于IOC总结
1.什么是IOC
2.xml配置文件管理对象
3.全注解的方式管理对象
四、Spring创建对象—工厂模式
-1.创建项目springdemo4_factory
-2.代码结构
-3.编辑配置类
-4.编辑User类
-5.编辑测试类
-6. 利用工厂模式创建对象(业务说明)
-7.创建工厂模式
-8.编辑测试API
注解复习
一、三大框架基本结构 -1.框架的分类
1.Spring框架: 整个框架中负责"宏观调控"的(主导),负责整合其它的第三方的框架.
2.SpringMVC框架: 主要负责实现前后端数据的交互
3.Mybatis框架/MybatisPlus框架:持久层框架,简化了JDBC *** 作数据库的方式, 提高效率.
4.SpringBoot框架/工具: SpringBoot采用了一种更加简化的方式封装了之前的框架.让程序变得更加简单.
Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container),其中核心技术 IOC和AOP。
三、Spring-IOC(Inversion of Control) -1.IOC介绍Ioc全称Inversion of Control,即“控制反转”,这是一种设计思想。对象创建的权利由Spring框架完成.由容器管理对象的生命周期.
小结:
1. 原来的对象的创建都是由用户自己手动创建,这样的方式耦合性 肯定高. 如果类发生了变化,则代码都得修改.
2. 现在所有的对象都交给Spring容器管理. 用户无需关心对象是如何实例化. 容器负责对象的注入即可. 以后几乎不用修改任何代码. 降低了代码的耦合性
-3.Spring配置开发 1.创建User类
package com.jt.demo; public class User { public void say(){ System.out.println("我是User对象,被Spring容器管理"); } }2.编辑spring.xml配置文件
说明: 由于需要使用Spring的框架,所以需要准备spring的配置文件,在resource中创建spring.xml配置文件
3.编辑测试API
package com.jt; import com.jt.demo.User; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestSpring { //spring管理对象的测试API @Test public void testDemo1(){ String resource = "spring.xml"; //创建spring容器. 并且加载指定的配置文件 对象已经交给容器管理 ApplicationContext context = new ClassPathXmlApplicationContext(resource); //从容器中获取对象 User user1 = (User) context.getBean("user"); User user2 = context.getBean(User.class); user2.say(); } }4.关于Spring容器
解释:
Spring容器的数据结构是Map集合. Map
key=“user” value=“通过反射机制实例化的对象”
5.了解反射源码
说明: 反射机制在框架中 一般使用比较多,给定类型的路径就可以获取其中的对象.但是要求必须有无参构造. 否则程序运行必报异常.
@Test public void testDemo2() throws ClassNotFoundException, IllegalAccessException, InstantiationException { User user = (User) Class.forName("com.jt.demo.User").newInstance(); user.say(); }-4.Spring 注解开发 1.关于Spring注解开发的说明
大约在2015年以前 框架的开发需要大量的xml配置文件。导致项目配置比较臃肿,开发效率略低. 但是项目整合时的 报错概率很高. Spring与时俱进 从3开始逐步演化为注解开发. 到了SpringBoot框架的诞生,标志着进入了全注解时代.
2.创建springdemo3_anno项目 3.编辑User类package com.jt.demo; public class User { public void say(){ System.out.println("使用全注解的方式管理对象"); } }4.编辑配置类
说明: 原始的开发使用xxx.xml文件 用来管理对象, 现在都使用java类的形式当作配置文件则将该java类 称之为配置类.
package com.jt.config; import com.jt.demo.User; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration //将当前类标识为配置类 public class SpringConfig {//xml @Bean public User user(){ return new User(); //相当于xml反射机制创建对象 } }5.编辑测试类
package com.jt; import com.jt.config.SpringConfig; import com.jt.demo.User; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestSpring { //利用注解的方式管理对象 @Test public void testDemo1(){ //1.利用注解的方式启动spring容器 ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class); //2. 从容器中获取对象 User user = context.getBean(User.class); //3. 对象调用方法 user.say(); } }-5.关于IOC总结 1.什么是IOC
由Spring容器管理对象的生命周期,降低代码耦合性
2.xml配置文件管理对象1.准备xxx.xml配置文件
2.准备bean标签
3.spring容器管理对象
ApplicationContext 容器顶级接口
ClassPathXmlApplicationContext 加载配置文件的实现类对象
1.准备配置类 @Configuration + @Bean
2.要求方法 必须有返回值
3.容器对象
ApplicationContext 容器顶级接口
AnnotationConfigApplicationContext 加载配置类的实现类对象
万能语法: 根据当前spring的配置规则,实例化接口对象. 我一般不写这些代码,如果想看也可以通过ApplicationContext 查找指定的实现类.
四、Spring创建对象—工厂模式 -1.创建项目springdemo4_factory -2.代码结构 -3.编辑配置类package com.jt.config; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component; //准备一个配置类 @Configuration @ComponentScan("com.jt") //当spring容器启动时,根据指定的包路径,扫描其子孙包 public class SpringConfig { }-4.编辑User类
package com.jt.demo; import org.springframework.stereotype.Component; //Spring容器管理 Map<类名首字母小写:user,实例化的对象> @Component public class User { //spring容器通过反射机制实例化对象 public void say(){ System.out.println("通过@Component注解实例化对象"); } }-5.编辑测试类
package com.jt; import com.jt.config.SpringConfig; import com.jt.demo.User; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class TestSpring { @Test public void testDemo1(){ ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class); User user = context.getBean(User.class); user.say(); } }-6. 利用工厂模式创建对象(业务说明)
Spring中管理的对象,大部分可以通过new/反射进行对象的创建. 但是有些对象由于特殊的原因.不能直接new/实例化.这时需要考虑是否可以通过工厂模式实现.
例如: Calendar 该类是一个抽象类 所以不能直接实例化
package com.jt.factory; import org.springframework.beans.factory.FactoryBean; import org.springframework.stereotype.Component; import java.util.Calendar; @Component("calendar") public class CalendarFactory implements FactoryBean-8.编辑测试API{ public CalendarFactory(){ System.out.println("工厂模式的无参构造"); } //现阶段 大家理解为主. 未来写结构设计的时候,作用很大!!!!! //动态执行该方法,获取返回值对象 @Override public Calendar getObject() throws Exception { //利用calendar的工具API 实现对象的创建 return Calendar.getInstance(); } @Override public Class> getObjectType() { //固定写法. 一般直接xxx.class即可 return Calendar.class; } }
@Test public void testDemo2(){ ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class); //Calendar calendar = context.getBean(Calendar.class); Calendar calendar = (Calendar) context.getBean("calendar"); System.out.println("获取当前时间:"+calendar.getTime()); System.out.println("获取年:"+calendar.getWeekYear()); }注解复习
- @Configuration 标识配置类
- @Bean 将自己方法的返回值交给Spring容器管理
- @Component 将该类交给spring容器管理. 通过反射自动实例化对象
- @ComponentScan(“com.jt”) 包扫描的注解 使Spring注解有效
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)