java ssm框架_java优雅的SSM框架(一):Spring框架(由浅入深,深度解读)

本文详细介绍了Spring框架的基础知识,包括其作用、容器操作、设计模式(单例与模型)、参数注入和注解扫描。还涵盖了Spring的核心概念IOC和DI,以及如何通过Spring容器实现对象的解耦。适合Spring初学者和进阶者阅读。

本系列作品持续更新,包括Spring,SpringMVC,Mybatis,SpringBoot,等流行框架,由于横跨知识面积较广,时间可能要久一些,希望有意向的读者能够加一下关注,收藏,谢谢大家的支持,来自一个程序员的敬礼

优雅的SSM框架

85fcfde61754bdee8fbff95ff61c777b.png

一、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文件的里面配置对

,进行导包

b953beb3954c745e79747440fce0f7fb.pngspring框架Maven依赖

2.用Spring容器创建对象(三种方法)

1.构造器new关键字

2.静态工厂方法:getInstance()

//启动Spring容器--默认情况下自动加载xml文件中的bean,根据每一个bean创建实例,且只创建一个对象简单的配置applicationContext.xml文件然后再java文件中用getBean()方法调用获得对象ApplicationContext ac= new ClassPathXmlApplicationContext("applicationContext.xml");SpringDemo02demo02=ac.getBean("demo01",SpringDemo02.class);

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 classA {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 voidtest01(){ApplicationContext applicationContext= newClassPathXmlApplicationContext("applicationContext.xml");applicationContext.getBean("b",B.class).execute();}

set注入的使用步骤:提供set方法-----配置元素的属性 name, ref, value

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 voidtest03(){ApplicationContext applicationContext = newClassPathXmlApplicationContext("applicationContext.xml");applicationContext.getBean("student", Student.class).execute();}

3.Spring的参数注入和基于注解的组件扫描

1.参数注入:依赖于getter和setter方法

1.getter、setter方法:

张三李四王五3215344354张三23

/**

*给基本数据注入赋值

*/

public class ValueBean {//给基本数据类型注入值int age;//给字符串注入值String name;//给list集合注入值private List list;//给set集合注入值private Set set;//给map集合注入值private Map map;//给Properties注入值private Properties properties;getter();setter();toString();}

/**

*测试参数注入

*/

@Testpublic void test04(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");ValueBean value = applicationContext.getBean("value", ValueBean.class);System.out.println(value);}

2.引用注入:

1234wwwm33

读取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;}@Overridepublic String toString() {return "properties name="+name+" age="+age+" sex="+sex;}}

2.注解扫描:减少xml文件的书写量

1.注解扫描:

/**

*注解扫描 组件扫描

*什么是组件扫描:指定一个包路径,Spring会自动扫描包及其子包所有的组件类

*当发现组件定义前有特定的注解标记时,

*就将该组件纳入到Spring容器,等价于原有XML配置中的定义功能

*组件扫描可以替代大量XML配置的定义

*

c0c367cd70fd2c65c03667e3716ef4ed.png常用注解

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获取到相应的对象@Overridepublic 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");}@Overridepublic String toString() {return "dept 的toString方法";}}

本系列作品持续更新,包括Spring,SpringMVC,Mybatis,SpringBoot,等流行框架,由于横跨知识面积较广,时间可能要久一些,希望有意向的读者能够加一下关注,收藏,谢谢大家的支持,来自一个程序员的

内容概要:本文是份针对2025年中国企业品牌传播环境撰写的《全网媒体发稿白皮书》,聚焦企业媒体发稿的策略制定、渠道选择与效果评估难题。通过分析当前企业面临的资源分散、内容同质、效果难量化等核心痛点,系统性地介绍了新闻媒体、央媒、地方官媒和自媒体四大渠道的特点与适用场景,并深度融合“传声港”AI驱动的新媒体平台能力,提出“策略+工具+落地”的体化解决方案。白皮书详细阐述了传声港在资源整合、AI智能匹配、舆情监测、合规审核及全链路效果追踪方面的技术优势,构建了涵盖曝光、互动、转化与品牌影响力的多维评估体系,并通过快消、科技、零售等行业的实战案例验证其有效性。最后,提出了按企业发展阶段和营销节点定制的媒体组合策略,强调本土化传播与政府关系协同的重要性,助力企业实现品牌声量与实际转化的双重增长。; 适合人群:企业市场部负责人、品牌方管理者、公关传播从业者及从事数字营销的相关人员,尤其适用于初创期至成熟期不同发展阶段的企业决策者。; 使用场景及目标:①帮助企业科学制定媒体发稿策略,优化预算分配;②解决渠道对接繁琐、投放不精准、效果不可衡量等问题;③指导企业在重大营销节点(如春节、双11)开展高效传播;④提升品牌权威性、区域渗透力与危机应对能力; 阅读建议:建议结合自身企业所处阶段和发展目标,参考文中提供的“传声港服务组合”与“预算分配建议”进行策略匹配,同时重视AI工具在投放、监测与优化中的实际应用,定期复盘数据以实现持续迭代。
先展示下效果 https://pan.quark.cn/s/987bb7a43dd9 VeighNa - By Traders, For Traders, AI-Powered. Want to read this in english ? Go here VeighNa是套基于Python的开源量化交易系统开发框架,在开源社区持续不断的贡献下步步成长为多功能量化交易平台,自发布以来已经积累了众多来自金融机构或相关领域的用户,包括私募基金、证券公司、期货公司等。 在使用VeighNa进行二次开发(策略、模块等)的过程中有任何疑问,请查看VeighNa项目文档,如果无法解决请前往官方社区论坛的【提问求助】板块寻求帮助,也欢迎在【经验分享】板块分享你的使用心得! 想要获取更多关于VeighNa的资讯信息? 请扫描下方二维码添加小助手加入【VeighNa社区交流微信群】: AI-Powered VeighNa发布十周年之际正式推出4.0版本,重磅新增面向AI量化策略的vnpy.alpha模块,为专业量化交易员提供站式多因子机器学习(ML)策略开发、投研和实盘交易解决方案: :bar_chart: dataset:因子特征工程 * 专为ML算法训练优化设计,支持高效批量特征计算与处理 * 内置丰富的因子特征表达式计算引擎,实现快速键生成训练数据 * Alpha 158:源于微软Qlib项目的股票市场特征集合,涵盖K线形态、价格趋势、时序波动等多维度量化因子 :bulb: model:预测模型训练 * 提供标准化的ML模型开发模板,大幅简化模型构建与训练流程 * 统API接口设计,支持无缝切换不同算法进行性能对比测试 * 集成多种主流机器学习算法: * Lass...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值