2019年最新Java企业框架前后台大型项目实战开发源码/SSH/SSM39套Java架构师,高并发,高性能,高可用,分布式,集群,电商,缓存,微服务,微信支付宝支付,公众号开发,java8新特性,P2P金融项目,程序设计,功能设计,数据库设计,第三方支付,web安全,性能调优,设计模式,数据结构,并发编程,虚拟机,中间件,数据库,项目实战,大型分布式电商项目实战视频教程
视频课程包含:
39套包含:架构师,高并发,高性能,高可用,高可扩展,分布式,集群,电商,缓存,微服务,微信支付宝支付,公众号开发,java8新特性,P2P金融项目,程序设计,功能设计,数据库设计,架构设计,web安全,性能调优,设计模式,数据结构,项目实战,工作流,程序调优,负载均衡,Solr集群与应用,主从复制,中间件,全文检索,任务调度,jvm虚拟机,Spring boot,Spring cloud,Docker,Kubernetes,jvm,Dubbo,Elasticsearch,ActiveMQ,Rocketmq,Rabbitmq,Kafka,Mycat,Spring,Git,Nosql,Mecached,Netty,Nio,Mina,Nutch,Webservice,Activiti,Shiro,Tomcat,Mysql,Oracle,Quartz,ELK Stack,zookeeper,Activiti大型分布式电商实战等高端视频课程......
39套精品课程介绍:
1、39套精品是掌柜最近整理出的最新课程,都是当下最火的技术,最火的课程,也是全网课程的精品;
2、39套资源包含:全套完整高清视频、完整源码、配套文档;
3、知识也是需要投资的,有投入才会有产出(保证投入产出比是几百上千倍),如果有心的朋友会发现,身边投资知识的大都是技术经理或者项目经理,工资一般相对于不投资的也要高出很多;
本系列作品持续更新,包括Spring,SpringMVC,Mybatis,SpringBoot,等流行框架,由于横跨知识面积较广,时间可能要久一些,希望有意向的读者能够加一下关注,收藏,谢谢大家的支持,来自一个程序员的敬礼
优雅的SSM框架
一、Spring框架简介
1.Spring是一个开源的轻量级的应用开发框架。
2.目的是简化企业级应用程序开发,降低侵入性(程序间的耦合性)。
3.Spring是以IOC(控制反转)和AOP(面向切面)为核心的轻量级容器。
4.Spring本质是管理软件中的对象,即创建对象和维护对象之间的关系。
5.Spring对常用的API做了封装和简化
二、Spring的作用
1.管理对象(主要功能)
Spring提供了一个容器,帮助创建对象以及管理对象之间的依赖关系,降低了对象之间的耦合度,方便代码的维护。
---什么是Spring容器:Spring容器是spring框架中最核心的一个模块,用于管理对象。
2.集成其他的框架
Spring可以把其他的框架集成起来,和其他的框架联合使用
三、对Spring容器的操作—标题1
1.启动Spring容器
导包:在pom.xml文件的
,进行导包
2.用Spring容器创建对象(三种方法)
1.构造器new关键字
2.静态工厂方法:getInstance()
//启动Spring容器--默认情况下自动加载xml文件中的bean,根据每一个bean创建实例,且只创建一个对象简单的配置applicationContext.xml文件
3.使用实例工厂
四、Spring容器的设计模式—单例模式和模型模式
1.创建对象的参数配置:
-->
2.对象的生命周期配置:
对象的生命周期:new--init---service---destory创建对象Spring容器自动创建,init方法
3.对象的销毁:
对象的销毁 关闭Spring容器销毁对象 关闭Spring容器的方法:
((ClassPathXmlApplicationContext)applicationContext).close();
五、Spring对于对象的解耦操作 IOC
1.IOC(控制反转):
IOC:spring的核心---控制反转 由容器来管理对象之间的依赖关系
DI:依赖注入:容器通过调用对象提供的set方法或者构造器来建立依赖关系。
IDC是目标 DI是手段
2.IOC注入方式:set注入、构造器、自动装载
1.Set注入:
配置文件
A类
public class A {publicA(){System.out.println("A --- A");}public voidf1(){System.out.println("A --- f1");}}
B类
public class B {private A a;publicB(){System.out.println("B -- B");}public voidsetA(A a) {this.a = a;}public voidexecute(){a.f1();}}
测试类
@Testpublic void test01(){ApplicationContext applicationContext= new ClassPathXmlApplicationContext("applicationContext.xml");applicationContext.getBean("b",B.class).execute();}
set注入的使用步骤:提供set方法-----配置
2.构造器注入:
配置文件
Peson类
public class Person{private Man man;private Woman woman;Public Person(){System.out.println("person");}public Person (Manman,Womanwoman){this.man=man;this.woman=woman;}public void execute(){man.m();woman.w();}}
Man类
public class Man{public Man(){System.out.println("m");}public void m(){System.out.println("man---f");}}
Woman类
public class Woman{public Woman(){System.out.println("w");}public void w(){System.out.println("woman---f");}}
@Testpublic void test02(){ApplicationContext applicationContext= new ClassPathXmlApplicationContext("applicationContext.xml");applicationContext.getBean("person",Person.class).execute();}
3.自动装配:
配置文件
Teacher类
public class Teacher {publicTeacher(){}public voidteach(){System.out.println("teacher -- teach");}}
Student类
public class Student {privateTeacher teacher;public voidsetTeacher(Teacher teacher){this.teacher = teacher;}public voidexecute(){teacher.teach();}}
@Testpublic void test03(){ApplicationContext applicationContext = newClassPathXmlApplicationContext("applicationContext.xml");applicationContext.getBean("student", Student.class).execute();}
3.Spring的参数注入和基于注解的组件扫描
1.参数注入:依赖于getter和setter方法
1.getter、setter方法:
/**
* 给基本数据注入赋值
*/
public class ValueBean {//给基本数据类型注入值 int age; //给字符串注入值 String name; //给list集合注入值 private List
/**
* 测试参数注入
*/
@Testpublic void test04(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); ValueBean value = applicationContext.getBean("value", ValueBean.class);System.out.println(value);}
2.引用注入:
读取properties文件中的配置内容
3.Spring表达式:
//测试用的类
public class PropertiesBean {private String name; private String age;private String sex; public void setAge(String age) { this.age = age; }public void setName(String name) { this.name = name; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "properties name="+name+" age="+age+" sex="+sex; }}
2.注解扫描:减少xml文件的书写量
1.注解扫描:
/**
* 注解扫描 组件扫描
* 什么是组件扫描:指定一个包路径,Spring会自动扫描包及其子包所有的组件类
* 当发现组件定义前有特定的注解标记时,
* 就将该组件纳入到Spring容器,等价于原有XML配置中的
* 组件扫描可以替代大量XML配置的
*
2.注解步骤及常用注解:
----注解实例:
@Scope("prototype")//注解成原型模式 不加这个注解默认是单例模式
@Component("emp")//创建对象的注解 ("emp")表示自定义的id
@Lazy(true)//懒加载的注解
public class Emp {private Dept dept; @Resource(name = "dept") //具有依赖关系的Bean对象的注解 public void setDept(Dept dept) {System.out.println("set依赖注入---"+dept); this.dept = dept; }//1.使用组件扫描,首先需要在XML配置中指定扫描路径 public Emp(){System.out.println("emp --- 组件扫描"); } //2.当一个组件在扫描过程中被检测到时,会生成一个默认id值, //默认id为小写开头的类名,也可以在注解标记中自定义id, //3.开启Spring容器 根据id获取到相应的对象@Override public String toString() { return "emp 组件扫描"; }@PostConstruct //注解生成初始化方法 public void init(){System.out.println("init 方法 初始化"); } @PreDestroy //注解生成销毁方法 public void destory(){ /** * 原型模式下不能进行调用销毁方法* 单例模式下可以进行调用 */ System.out.println("销毁的方法"); }}
/**
*指定依赖注入的关系
*/
@Component("dept")//将类添加进Spring进行管理
public class Dept {public Dept(){ System.out.println("dept -- dept"); }@Override public String toString() { return "dept 的toString方法"; }}