初识spring

本文介绍了Spring框架的基础概念,包括其起源、核心功能与优势,并详细讲解了如何使用Spring进行开发,从创建项目到配置文件的设置,再到依赖注入等多种实践技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是spring


Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由Rod Johnson在其著作Expert One-On-One J2EE

Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式)轻量级开源框架。

EE开发分成三层结构:

* WEB层:Spring MVC.

*业务层:Bean管理:(IOC)

*持久层:Spring的JDBC模板.ORM模板用于整合其他的持久层框架.

Expert One-to-One J2EE Design andDevelopment:J2EE的设计和开发:(2002.EJB)

Expert One-to-One J2EE Development withoutEJB:J2EE不使用EJB的开发.

2.学习Spring的优势

方便解耦,简化开发

Spring  就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理

AOP编程的支持

Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控的功能

声明式事物的支持

只需要通过配置就可以完成对事物的管理,而无需手动编程。

方便程序的测试

Spring对Junit4支持,可以通过注解方便的测试Spring程序

方便集成各种优秀的框架

Spring不排斥各种优秀的开源框架,其内部提供了各种优秀框架(struts2、Hibernate)的直接支持

降低JavaEE API的使用难度

Spring对javaee开发中非常难用的一些API,都提供可封装。是用难度降低。


IOC:Inversion of

Control控制反转.指的是对象的创建权反转(交给)给Spring.

作用是实现了程序的解耦合.

3.使用Spring

3.1下载Spring开发包

http://spring.io/

3.2创建WEB项目,导包


lQ

1.1.1.1步骤三:引入相关配置文件:

log4j.properties

applicationContext.xml

引入约束:

spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="

http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd">

1.1.1.2步骤四:编写相关的类:

publicinterfaceUserDao {

publicvoidsayHello();

}

publicclassUserDaoImplimplementsUserDao {

@Override

publicvoidsayHello() {

System.out.println("Hello

Spring...");

}

}

1.1.1.3步骤五:完成配置:


"userDao"class="cn.itcast.spring.demo1.UserDaoImpl">

1.1.1.4步骤六:编写测试程序:

@Test

// Spring的方式:

publicvoiddemo2(){

//创建Spring的工厂类:

ApplicationContextapplicationContext=newClassPathXmlApplicationContext("applicationContext.xml");

//通过工厂解析XML获取Bean的实例.

UserDaouserDao= (UserDao)applicationContext.getBean("userDao");

userDao.sayHello();

}

1.1.1.5IOC和DI:

IOC:控制反转,将对象的创建权交给了Spring.

DI:DependencyInjection依赖注入.需要有IOC的环境,Spring创建这个类的过程中,Spring将类的依赖的属性设置进去.

1.1.2Spring中的工厂:

1.1.2.1ApplicationContext:

ApplicatioContext接口有两个实现类:

ClassPathXmlApplicationContext:加载类路径下Spring的配置文件.

FileSystemXmlApplicationContext:加载本地磁盘下Spring的配置文件.

1.1.2.2BeanFactory:

1.1.2.3BeanFactory和ApplicationContext的区别:

BeanFactory:是在getBean的时候才会生成类的实例.

ApplicationContext:在加载applicationContext.xml时候就会创建.

1.1.3配置STS的XML的提示:

1.1.3.1Spring配置文件中提示的配置

复制路径:

*http://www.springframework.org/schema/beans/spring-beans.xsd

查找XML Catalog:

点击Add..

1.1.4Spring的相关配置:

1.1.4.1id属性和name属性标签的配置

id:Bean起个名字.在约束中采用ID的约束:唯一.必须以字母开始,可以使用字母、数字、连字符、下划线、句话、冒号id:不能出现特殊字符.

name:Bean起个名字.没有采用ID的约束.name:出现特殊字符.如果没有id的话, name可以当做id使用.

*整合struts1的时候:

1.1.4.2scope属性:Bean的作用范围.

* singleton:默认值,单例的.

* prototype:多例的.

* request:WEB项目中,Spring创建一个Bean的对象,将对象存入到request域中.

* session:WEB项目中,Spring创建一个Bean的对象,将对象存入到session域中.

* globalSession:WEB项目中,应用在Porlet环境.如果没有Porlet环境那么globalSession相当于session.

1.1.4.3Bean的生命周期的配置:

通过配置标签上的init-method作为Bean的初始化的时候执行的方法,配置destroy-method作为Bean的销毁的时候执行的方法。

销毁方法想要执行,需要是单例创建的Bean而且在工厂关闭的时候,Bean才会被销毁.

1.1.5Spring的Bean的管理XML的方式:

1.1.5.1Spring的Bean的属性注入:

【构造方法的方式注入属性】


"car"class="cn.itcast.spring.demo4.Car">

undefined"name"value="保时捷"/>undefined

undefined"price"value="1000000"/>undefined

【set方法的方式注入属性】


"car2"class="cn.itcast.spring.demo4.Car2">

"name"value="奇瑞QQ"/>

"price"value="40000"/>

1.1.5.2Spring的属性注入:对象类型的注入:


"person"class="cn.itcast.spring.demo4.Person">

"name"value="会希"/>


"car2"ref="car2"/>

1.1.5.3名称空间p的属性注入的方式:Spring2.x版本后提供的方式.

第一步:引入p名称空间

xmlns:p="http://www.springframework.org/schema/p"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="

http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd">

第二步:使用p名称空间.

*普通属性:p:属性名称=””

*对象类型属性:p:属性名称-ref=””


p:price="1200000"/>

1.1.5.4SpEL的方式的属性注入:Spring3.x版本后提供的方式.

SpEL:Spring Expression Language.

语法:#{ SpEL }


"car2"class="cn.itcast.spring.demo4.Car2">

"name"value="#{'奔驰'}"/>

"price"value="#{800000}"/>

引用了另一个类的属性


1.1.5.5注入复杂类型:


"collectionBean"class="cn.itcast.spring.demo5.CollectionBean">


"arrs">

会希

冠希

天一


"list">

芙蓉

如花

凤姐


"map">

"aaa"value="111"/>

"bbb"value="222"/>

"ccc"value="333"/>


"properties">

"username">root

"password">123

1.1.5.6Spring的分配置文件的开发

一种:创建工厂的时候加载多个配置文件:

ApplicationContext applicationContext = newClassPathXmlApplicationContext("applicationContext.xml","applicationContext2.xml");

二种:在一个配置文件中包含另一个配置文件:

1.2案例代码

1.2.1搭建环境:

1.2.1.1创建web项目,引入jar包.

WEB层使用Struts2:

* Struts2开发的基本的包

Spring进行Bean管理:

*Spring开发的基本的包

1.2.1.2引入配置文件:

Struts2:

*web.xml

struts2

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

struts2

/*

*struts.xml

Spring:

*applicationContext.xml

*log4j.properties

1.2.1.3引入页面:

1.2.1.4创建包结构和类:

1.2.1.5在添加页面提交内容到Action:

1.2.1.6改写Action类并配置Action:

"crm"extends="struts-default"namespace="/">

"customer_*"class="cn.itcast.crm.web.action.CustomerAction"method="{1}">

1.2.1.7在Action调用业务层:

将业务层类配置到Spring中:

在Action中获取业务层类:

publicString save(){

System.out.println("Action中的save方法执行了...");

System.out.println(customer);

//传统方式:

/*CustomerService customerService = new CustomerServiceImpl();

customerService.save(customer);*/

// Spring的方式进行操作:

ApplicationContextapplicationContext=newClassPathXmlApplicationContext("applicationContext.xml");

CustomerServicecustomerService= (CustomerService)applicationContext.getBean("customerService");

customerService.save(customer);

returnNONE;

}

****每次请求都会创建一个工厂类,服务器端的资源就浪费了,一般情况下一个工程只有一个Spring的工厂类就OK了.

*将工厂在服务器启动的时候创建好,将这个工厂放入到ServletContext域中.每次获取工厂从ServletContext域中进行获取.

*ServletContextLinstener:监听ServletContext对象的创建和销毁.

1.2.2Spring整合WEB项目

1.2.2.1引入spring-web.jar包:

配置监听器:

org.springframework.web.context.ContextLoaderListener

contextConfigLocation

classpath:applicationContext.xml

1.2.2.2改写Action:

/**

*保存客户的执行的方法:save

*/

publicString save(){

//传统方式:

/*CustomerService

customerService = new CustomerServiceImpl();

customerService.save(customer);*/

// Spring的方式进行操作:

/*ApplicationContext

applicationContext = new

ClassPathXmlApplicationContext("applicationContext.xml");

CustomerService customerService = (CustomerService)

applicationContext.getBean("customerService");*/

WebApplicationContextapplicationContext=WebApplicationContextUtils.getWebApplicationContext(ServletActionContext.getServletContext());

CustomerServicecustomerService= (CustomerService)applicationContext.getBean("customerService");

System.out.println("Action中的save方法执行了...");

System.out.println(customer);

customerService.save(customer);

returnNONE;

}

1.2.2.3编写Dao并配置:

1.2.2.4业务层调用DAO:

publicclassCustomerServiceImplimplementsCustomerService {

privateCustomerDaocustomerDao;

publicvoidsetCustomerDao(CustomerDaocustomerDao) {

this.customerDao=customerDao;

}

}

内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
内容概要:本文研究了企业人工智能(AI)发展对低技能就业的影响,基于2012-2022年中国A股上市公司的数据,发现AI显著减少了低技能员工的数量。研究还揭示了数字化转型和人力资本投资在这一过程中起到中介作用,表明AI不仅直接替代低技能岗位,还通过提升数字化能力和技能需求间接影响就业。异质性分析显示,这些负面影响在非国有企业和非高科技企业中尤为明显。此外,文章通过Python代码展示了详细的复现步骤,包括数据预处理、基准回归、中介效应分析、异质性分析及可视化。 适用人群:对AI与劳动力市场关系感兴趣的学者、政策制定者以及从事相关研究的数据分析师。 使用场景及目标:①理解AI对企业低技能就业的具体影响;②分析数字化转型和人力资本投资的中介作用;③探讨不同企业类型(如国有企业与非国有企业、高科技与非高科技企业)在AI影响下的异质性表现;④通过代码实现复现实证研究结果,提供实证分析的方法论参考。 其他说明:本文不仅提供了理论分析,还通过详细的代码实现帮助读者理解具体的操作步骤。研究结果对于制定相关政策以应对AI带来的就业挑战具有重要参考价值,同时为后续研究提供了数据处理和模型构建的范例。文章最后讨论了研究的局限性和未来可能的研究方向,强调了治理结构和财务特征在AI转型中的重要作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值