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类似,不再举例

0 0