一、Spring框架的江湖地位
1、Spring概念
它是一个轻量级的DI/IoC和 AOP容器的开源框架
提供了一套适用于任何场景的编程和配置模型来开发企业级java应用程序
无侵入,不需要使用方代码加入额外的代码,完全隔离
模块化,功能划分为模块,允许只使用某个模块
2、Spring功能
提供了IOC机制,避免了硬编码造成的程序耦合
提供了AOP(面向切面编程方式)功能,实现很大特定功能
声明事务控制处理
对JDBC进行了轻量级封装,可以更加灵活的去操作数据库
提供MVC设计模式
提供了文件上传、定时器等常用工具
对其他优秀的框架支持
3、Spring框架
1>web目录下的UserControlleer
Data Access/Integration层:JDBC、ORM、OXM、JMS和Transaction模块
Web层:Web、Web-Servlet、WebSocket、Web-Prolet模块
AOP模块:提供符合AOP标准的面向切面编程的实现
Core Container(核心容器):Beans、Core、Context和SpEL模块
Test:JUnit、TestNG对Spring组件进行测试
二、Spring IoC(Inverse of Control) 控制反转
1、概念
将你设计好的类交给系统控制,而非类内部控制
DI依赖注入是实现IOC的一种
是在运行期,Spring根据配置文件,将其他对象的引用通过组件的提供的setter方法或者构造器进行设定
2、Spring容器作用
实例化对象
分析对象的依赖并注入
3、IOC的优势
不需要实现框架指定的接口,轻松将组件从Spring中脱离,甚至不需要任何修改
组件间依赖关系减少,提高代码可重用性
低耦合,便于维护和管理
三、Spring程序
1、web新建UserControlleer类
package com.chinasoft.etc.spring.web;
import com.chinasoft.etc.spring.services.UserService;
import com.chinasoft.etc.spring.services.impl.UserServiceimpl;
public class UserControlleer {
private UserService userservice;
public String login(String username,String password){
String resultMessage=userservice.login(username,password);
return resultMessage;
}
public void setUserservice(UserService userservice) {
this.userservice = userservice;
}
}
2、services下建立UserService接口
package com.chinasoft.etc.spring.services;
public interface UserService {
String login(String username, String password);
}
3、services下建立impl包,并创建UserServiceimpl类
package com.chinasoft.etc.spring.services.impl;
import com.chinasoft.etc.spring.dao.UserDAO;
import com.chinasoft.etc.spring.dao.model.User;
import com.chinasoft.etc.spring.services.UserService;
public class UserServiceimpl implements UserService {
private UserDAO userDAO;
@Override
public String login(String username, String password) {
User user=userDAO.findUsernameAndPassword(username,password);
return user!=null?"成功":"失败";
}
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
}
4、dao包下建立UserDao接口
package com.chinasoft.etc.spring.dao;
import com.chinasoft.etc.spring.dao.model.User;
public interface UserDAO {
User findUsernameAndPassword(String username, String password);
}
5、dao包下建立model,并创建User类
package com.chinasoft.etc.spring.dao.model;
public class User {
private String username;
public User(String username) {
this.username = username;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
'}';
}
}
6、dao包创建impl包,并创建UserDaoImpl类
package com.chinasoft.etc.spring.dao.impl;
import com.chinasoft.etc.spring.dao.UserDAO;
import com.chinasoft.etc.spring.dao.model.User;
public class UserDAOImpl implements UserDAO {
@Override
public User findUsernameAndPassword(String username, String password) {
return new User(username);
}
}
7、在main包下创建rescources,并创建applicationContext.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="userDao" class="com.chinasoft.etc.spring.dao.impl.UserDAOImpl"/>
<bean id="userService" class="com.chinasoft.etc.spring.services.impl.UserServiceimpl">
<property name="userDAO" ref="userDao"/>
</bean>
<bean id="userController" class="com.chinasoft.etc.spring.web.UserControlleer">
<property name="userservice" ref="userService"/>
</bean>
</beans>
8、App里面主函数如下
package com.chinasoft.etc.spring;
import com.chinasoft.etc.spring.dao.impl.UserDAOImpl;
import com.chinasoft.etc.spring.services.impl.UserServiceimpl;
import com.chinasoft.etc.spring.web.UserControlleer;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
// loginByset();
//根据配置文件构建IOC容器
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
System.out.println(ctx);
//从容器中获取bean
UserControlleer userControlleer=ctx.getBean("userController",UserControlleer.class);
String result=userControlleer.login("zhangs","234524");
System.out.println(result);
}
}