Spring框架介绍
来源:互联网 发布:cadence软件仿真教程 编辑:程序博客网 时间:2024/06/06 07:09
一、用分层思想实现程序结构优化
(1)这是一个基于SSH框架的网站文件布局
(2)以下是一个基于SSH框架的网站流程图
(3)以下是一个基于SSM框架的网站流程图
二、Spring IOC功能详述
1.注解方式实现IOC
使用注解方式之前,在applicationContext.xml里面加上一下配置:
Action层
package com.juligang.action;
import java.io.IOException;
import java.io.PrintWriter;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.juligang.model.User;
import com.juligang.service.UserService;
public class UserAction {
User user;
UserService service; //调用Service层
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public UserService getService() {
return service;
}
@Resource(name=”service”) //通过注解方式注入service
public void setService(UserService service) {
this.service = service;
}
public String addOrUpdate(){ service.add(user); return login();}public String checkExist(){ user=service.check(user); HttpServletResponse response=ServletActionContext.getResponse(); try { PrintWriter out=response.getWriter(); if(null!=user) { out.print("YES!"+user.getId()); } else { out.print("NO!"+user.getId()); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null;}public String login(){ //context只在一次请求时有效 //ActionContext context=ActionContext.getContext(); //context.put("USER", user); HttpServletRequest request=ServletActionContext.getRequest(); HttpSession session=request.getSession(); session.setAttribute("USER", user); return "main";}public String exit(){ HttpServletRequest request=ServletActionContext.getRequest(); HttpSession session=request.getSession(); session.setAttribute("USER", null); return "main";}
}
Service实现层
package com.juligang.service.impl;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import com.juligang.dao.UserDAO;
import com.juligang.model.User;
import com.juligang.service.UserService;
@Component(value=”service”) //通过注解建立一个service实现类,共Action层装配
public class UserServiceImpl implements UserService {
UserDAO dao;
// 这是构造函数方式注入
// public UserServiceImpl(UserDAO dao) {
// super();
// this.dao = dao;
// }
// 这是setter方式注入
public UserDAO getDao() {
return dao;
}
@Resource(name=”sqlDAO”) //通过注解给DAO装配一个实现类
//可以装配sqlDAO,也可装配fileDAO
public void setDao(UserDAO dao) {
this.dao = dao;
}
@Overridepublic void add(User user) { // TODO Auto-generated method stub dao.save(user);}@Overridepublic User check(User user) { // TODO Auto-generated method stub return dao.check(user);}
}
DAO实现层
(1)MySQL实现层
package com.juligang.dao.impl;
import javax.annotation.Resource;
import org.springframework.orm.hibernate4.HibernateTemplate;
import org.springframework.stereotype.Component;
import com.juligang.dao.UserDAO;
import com.juligang.model.User;
@Component(value=”sqlDAO”) //DAO实现类1
public class UserDAOMySqlImpl implements UserDAO {
HibernateTemplate hibernateTemplate;
@Resource
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
@Overridepublic void save(User user) { hibernateTemplate.merge(user);}@Overridepublic User check(User user) { // TODO Auto-generated method stub return hibernateTemplate.findByExample(user).get(0);}
}
(2)File实现类
package com.juligang.dao.impl;
import java.io.FileWriter;
import java.io.IOException;
import org.springframework.stereotype.Component;
import com.juligang.dao.UserDAO;
import com.juligang.model.User;
@Component(value=”fileDAO”) //DAO实现类2
public class UserDAOFileImpl implements UserDAO {
@Overridepublic void save(User user) { // TODO Auto-generated method stub FileWriter fw; try { fw = new FileWriter("e:\\Users.txt",true); fw.write(user.getName()+":"+user.getPwd()); fw.write("\r\n"); fw.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }}@Overridepublic User check(User user) { // TODO Auto-generated method stub return user;}
}
注解方式总结:
Action层
@Resource(name=”userService”) //装配对象
Service实现层
@Component(value=”userService”) //初始化一个对象
@Resource(name=”sqlDAO”)
DAO实现层
@Component(value=”sqlDAO”)
@Component(value=”fileDAO”)
注意:如果把Component里面的value和Resource里面的name省略掉,那么默认值为类的第一个字母小写全称
这也是基于分层思想的技术实现
2.XML方式实现IOC
与注解方式实现的效果一样,只是把装配控制权交给了XML配置文件
IoC=控制反转=inverse of control
注解方式控制权在源代码中,通过这种方式,控制权在配置文件中
DI =依赖注入=dependency injection
同样是上面的程序
去掉@Component和@Resource注解,这些定义和装配的任务都放在.xml文件中
不能像注解方式那样一层一层往上装配。
3.Spring IoC的基本原理
inverse of control = 控制反转
dependency injection = 依赖注入
帮我们创建对象,帮我们组织和装配对象
1.自动装配
autowire :byName,byType
(1)默认的装配方式
(2)自动装配autowire :byName
UserServiceImpl类中有一个属性dao,需要注入,我们设置autowire=”byName”,所以Spring会自动去寻找跟dao名字相同的实现进行装配
由于dao有2个实现类,你要装配哪个,就把那个实例成dao
(3)自动装配autowire :byType
由于dao的实现类有两个,如果根据Type去自动装配会出问题,如果只有一个实现类,那么与根据Name装配效果一样
default-autowire:byname,byType
它是beans的一个属性,bean的属性autowire类似,不再举例
- Spring框架介绍
- spring的框架介绍
- spring 框架介绍
- spring框架介绍
- spring MVC框架介绍
- Spring Batch框架介绍
- Spring Integration框架介绍
- 2.Spring框架介绍
- Spring框架介绍
- 【spring框架】AOP介绍
- Spring - 框架介绍
- Spring框架介绍
- Spring框架介绍
- Spring MVC框架介绍
- Spring框架介绍
- Spring MVC - 框架介绍
- Spring框架入门介绍
- Spring boot 框架介绍
- JavaScript创建对象的几种方式
- android之DesignSupport
- Ubuntu构筑LiteIDE的Go语言开发环境
- [JZOJ 4832]高维宇宙
- 【C语言】——union共用体
- Spring框架介绍
- 遗传算法的简单实现(1):求解函数最大值
- C#中的反射
- 【GDOI2017模拟12.3】告别
- php判断相同文件
- asp.net手机网页横向适应屏幕
- 变量的存储类别
- 数据结构实验之查找二:平衡二叉树
- 生产者消费者问题