Spring学习笔记(一)

一、Spring 框架

Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。

Spring框架由七个模块组成:核心容器、应用上下文(Context)模块、Spring的AOP模块、JDBC抽象和DAO模块、对象/关系映射集成模块、Spring的Web模块、Spring的MVC框架。

介绍传送门-->http://baike.baidu.com/link?url=ZMgPopo8CSuxoq4cxxCjy600WLc07HP9K4ej4wI4Z07jpfyt82RlOk1MimelYU_tZwn9OyLE_dQVlXNzDm_Fba

二、关于学习Spring框架之前自身的疑惑

1 Spring框架是如何对项目进行有效管理的?

三、学习开始

3.1 准备好Spring的说明书   http://docs.spring.io/spring/docs/

3.2 准备Spring的JAR包 spring-framework-3.0.0.RELEASE

3.3 先写一点测试代码(不使用Spring框架),然后再引入Spring框架进行管理,对比前后者代码的不同之处

测试代码逻辑:

1 UserServiceImpl调用 UserDao(接口) 完成对User对象的保存和更新

2 UserDao(接口) 有两种实现UserDaoImpl和UserDaoImpl2 

UserServiceImpl

 package com.serviceImpl;

 import com.dao.UserDao;
import com.daoImpl.UserDaoImpl;
import com.entity.User; public class UserServiceImpl {
private UserDao userDao; public void add(User user) {
userDao = new UserDaoImpl(); //UserDaoImpl实现接口
userDao.save(user);
} public void modify(User user) {
userDao = new UserDaoImpl();//UserDaoImpl实现接口
userDao.update(user);
} public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
}

UserDao(接口)

package com.dao;

import com.entity.User;

public interface UserDao {
public void save(User user);
public void update(User user);
}

UserDao的实现类UserDaoImp

 package com.daoImpl;

 import com.dao.UserDao;
import com.entity.User; public class UserDaoImpl implements UserDao{ public void save(User user) {
System.out.println(user.getName()+"-->"+user.getRemark()+" save --调用UserDaoImpl!");
} public void update(User user) {
System.out.println(user.getName()+"-->"+user.getRemark()+" update --调用UserDaoImpl!");
}
}

UserDao的另一个实现类UserDaoImpl2

package com.daoImpl;

import com.dao.UserDao;
import com.entity.User; public class UserDaoImpl2 implements UserDao{ public void save(User user) {
System.out.println(user.getName()+"-->"+user.getRemark()+" save --调用UserDaoImpl2!");
} public void update(User user) {
System.out.println(user.getName()+"-->"+user.getRemark()+" update --调用UserDaoImpl2!");
}
}

最后给一个测试类(方便使用)

package com.serviceImpl.test;

import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.Test; import com.entity.User;
import com.serviceImpl.UserServiceImpl; public class UserServiceImplTest {
User user; @Before
public void setUp() throws Exception {
user = new User();
user.setName("testName");
user.setRemark("testRemark");
} @Test
public void testAdd() {
UserServiceImpl userServiceImpl = new UserServiceImpl();
userServiceImpl.add(user);
} @Test
public void testModify() {
UserServiceImpl userServiceImpl = new UserServiceImpl();
userServiceImpl.modify(user);
}
}

测试代码完成(未使用Spring框架)。

执行结果:

testName-->testRemark save --调用UserDaoImpl!
testName-->testRemark update --调用UserDaoImpl!

以上代码及执行结果可以看出

1 UserDao接口的实现方式是通过UserServiceImpl类里的代码管理的。

2 如果我们需要改变UserDao接口的实现方式则需要改动UserServiceImpl的代码 例如

userDao = new UserDaoImpl(); ----> userDao = new UserDaoImpl2(); //UserDaoImpl改成UserDaoImpl2

3.4 使用Spring框架进行管理

1 导入spring JAR包

2 在src目录下创建Beans.xml,剪切spring说明书中的basic structure of XML-based configuration metadata代码,粘贴进Beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean> <bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean> <!-- more bean definitions go here --> </beans>

3 对应于我们的项目开始进行Beans.xml的详细配置(目前写的Beans.xml 里对接口的注入是通过set方法,是Spring 注入的一种,随后会详细介绍)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--Spring框架beans.xml配置文件的基础:一个bean和一个对应的类,然后对bean进行统一的管理 --> <!--userDao的第一种实现方法映射的 bean -> userDaoImpl-->
<bean id="userDaoImpl" class="com.daoImpl.UserDaoImpl">
</bean> <!--userDao的第二种实现方法映射的 bean -> userDaoImpl2-->
<bean id="userDaoImpl2" class="com.daoImpl.UserDaoImpl2">
</bean> <!--UserServiceImpl映射的 bean -> userServiceImpl-->
<!--在这个bean里 我们来配置userDao的实现类对应的bean,引入property标签。
1 name对应当前bean(类)里面的变量名 private UserDao userDao;
2 ref表示所关联是哪个bean。 这里我们关联上userDaoImpl2也就是第二种实现方式 class="com.daoImpl.UserDaoImpl2";
3 完成1,2后,我们可以去把com.serviceImpl.UserServiceImpl文件里,原本在代码里NEW 出实现类的那段话给去掉,spring已经开始进行管理了。
-->
<bean id="userServiceImpl" class="com.serviceImpl.UserServiceImpl">
<property name="userDao" ref="userDaoImpl"> </property>
</bean>
</beans>

4 删除UserServiceImpl类里对接口实现方式控制的代码

package com.serviceImpl;

import com.dao.UserDao;
import com.daoImpl.UserDaoImpl;
import com.entity.User; public class UserServiceImpl {
private UserDao userDao; public void add(User user) {
// userDao = new UserDaoImpl(); //已经不需要我们在程序里面再NEW实现类了
userDao.save(user);
} public void modify(User user) {
// userDao = new UserDaoImpl();//已经不需要我们在程序里面再NEW实现类了
userDao.update(user);
} public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
}

5 已经完成了Spring的配置,现在对测试文件UserServiceImplTest进行修改,执行查看效果

package com.serviceImpl.test;

import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.entity.User;
import com.serviceImpl.UserServiceImpl; public class UserServiceImplTest {
User user; @Before
public void setUp() throws Exception {
user = new User();
user.setName("testName");
user.setRemark("testRemark");
} @Test
public void testAdd() {
ApplicationContext app = new ClassPathXmlApplicationContext("beans.xml");//通过ClassPathXmlApplicationContext获取beans.xml信息-->app
UserServiceImpl UserServiceImpl = (UserServiceImpl)app.getBean("userServiceImpl");//通过app NEW出具体bean对应的类,注意需要转换类型
UserServiceImpl.add(user);//调用方法
} @Test
public void testModify() {
ApplicationContext app = new ClassPathXmlApplicationContext("beans.xml");
UserServiceImpl UserServiceImpl = (UserServiceImpl)app.getBean("userServiceImpl");
UserServiceImpl.modify(user);
}
}

6 执行结果(UserDao接口的实现为bean里配置的userDaoImpl)

testName-->testRemark  save --调用UserDaoImpl2!

testName-->testRemark  update  --调用UserDaoImpl2!

7 如果要更换UserDao的实现,有了spring进行管理,我们只要去对beans.xml进行修改即可

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="userDaoImpl" class="com.daoImpl.UserDaoImpl">
</bean> <bean id="userDaoImpl2" class="com.daoImpl.UserDaoImpl2">
</bean> <bean id="userServiceImpl" class="com.serviceImpl.UserServiceImpl">
<property name="userDao" ref="userDaoImpl"> </property> <!-- 修改 ref="userDaoImpl"-->
</bean>
</beans>

8 再次查看执行的结果(UserDao接口的实现已经更换成userDaoImpl)

testName-->testRemark  save --调用UserDaoImpl!

testName-->testRemark  update --调用UserDaoImpl!

9 到此,Spring的部署及简单应用已经完成。

总结一下

1 Spring 是通过配置beans.xml 来对类和接口进行管理

2 具体的操作:

一 配置beans.xml  并删除代码里原本用来管理接口实现的代码

二 改写调用的方法 ClassPathXmlApplicationContext("xmlProfile").getBean("beanName");

3 对比原先的测试代码与用了Spring管理的后测试代码

一 程序的扩展性变强,只需要通过配置文件便可以进行管理,例如修改接口的实现方式变得非常简单。

二 程序的可阅读性提高,不需要进入代码层面进行阅读接口实现的方式,只需要在配置文件中查看即可。

Spring框架配置beans.xml的更多相关文章

  1. Spring框架配置beans.xml扩展

    Spring学习笔记(二) 续Spring 学习笔记(一)之后,对Spring框架XML的操作进行整理 1 什么是IOC(DI) IOC = inversion of control   控制反转 D ...

  2. spring框架中beans.xml文件报错XmlBeanDefinitionStoreException

    第一次构建spring,实现简单的注入方式,就发生了beans.xml文件报错,报错信息如下图 org.springframework.beans.factory.xml.XmlBeanDefinit ...

  3. Spring 框架配置web.xml 整合web struts

    package cn.itcast.e_web; import java.io.IOException; import javax.servlet.ServletContext; import jav ...

  4. Spring框架之beans源码完全解析

    导读:Spring可以说是Java企业开发里最重要的技术.而Spring两大核心IOC(Inversion of Control控制反转)和AOP(Aspect Oriented Programmin ...

  5. Spring注解配置和xml配置优缺点比较

    Spring注解配置和xml配置优缺点比较 编辑 ​ 在昨天发布的文章<spring boot基于注解方式配置datasource>一文中凯哥简单的对xml配置和注解配置进行了比较.然后朋 ...

  6. 使用spring框架,用xml方式进行bean装配出现“The fully qualified name of the bean's class, except if it serves...”

    使用spring框架,用xml方式进行bean装配出现“The fully qualified name of the bean's class, except if it serves...”. 原 ...

  7. 最新 Eclipse IDE下的Spring框架配置及简单实例

    前段时间开始着手学习Spring框架,又是买书又是看视频找教程的,可是鲜有介绍如何配置Spring+Eclipse的方法,现在将我的成功经验分享给大家. 本文的一些源代码来源于码农教程:http:// ...

  8. 0044 spring框架的applicationContext.xml的命名空间

    Spring框架中,创建bean,装配bean,事务控制等,可以用xml配置或者注解扫描的方法实现.如果用注解扫描,在xml配置中得加上 <context:component-scan base ...

  9. 【Spring】Spring框架配置详情

    Spring框架的一个亮点就是能实现注入并且可以对实例化的Bean进行管理. 本文将对Spring框架的配置做一个详细的讲解. 一般情况下Spring是不单独使用的,而是和Hibernate配合使用, ...

随机推荐

  1. JIRA Plugin Development——Configurable Custom Field Plugin

    关于JIRA Plugin开发的中文资料相当少,这可能还是由于JIRA Plugin开发在国内比较小众的原因吧,下面介绍下自己的一个JIRA Plugin开发的详细过程. 业务需求 创建JIRA IS ...

  2. 关于添加IBDesignable实时building很卡问题的解决

    公共库加了@IBDesignable,可以实时预览图标 但是有个问题,每次打开XIB的时候都会Building,会造成电脑会很卡 有个解决方法,在xcode的Editor下拉框取消auto refre ...

  3. postman传递参数的问题

    postman是一款通过post或者get发送请求测试代码的工具 如果是类的话,就选择JSON格式,如果是一个字段的方法,就直接写入方法值就好了比如 public PageResult<Info ...

  4. World Wind Java开发之四——搭建本地WMS服务器(转)

    在提供地理信息系统客户端时,NASA还为用户提供了开源的WMS Server 服务器应用:World Wind WMS Server.利用这个应用,我们可以架设自己的WMS服务并使用自己的数据(也支持 ...

  5. hdu-1598 find the most comfortable road---kruskal+枚举下界

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1598 题目大意: XX星有许多城市,城市之间通过一种奇怪的高速公路SARS(Super Air Ro ...

  6. CDQ分治入门

    前言 \(CDQ\)分治是一个神奇的算法. 它有着广泛的用途,甚至在某些题目中还能取代\(KD-Tree\).树套树等恶心的数据结构成为正解,而且常数还小得多. 不过它也有一定的缺点,如必须离线操作, ...

  7. React后台管理系统-首页Home组件

    1.Home组件要显示用户总数.商品总数和订单总数,数据请求后端的 /manage/statistic/base_count.do接口,返回的是 this.state = {            u ...

  8. z-index、absolute、marquee滚动条的问题

    1.z-index 层次叠加 ,元素叠加,谁的权重大谁就在上面 1).父级出现position:relation:的时候,失效: 2).层叠元素出现float的时候失效: 3).层次元素也得设置pos ...

  9. Spring Framework(框架)整体架构 变迁

    Spring Framework(框架)整体架构 2018年04月24日 11:16:41 阅读数:1444 标签: Spring框架架构 更多 个人分类: Spring框架   版权声明:本文为博主 ...

  10. 用户和用户组以及 Linux 权限管理

    1.从 /etc/passwd 说起 前面的基本命令学习中,我们介绍了使用 passwd 命令可以修改用户密码.对于操作系统来说,用户名和密码是存放在哪里的呢?我们都知道一个站点的用户名和密码是存放在 ...