spring(ioc)

1. 什么是spring,它能够做什么?
Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。
Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。
然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
目的:解决企业应用开发的复杂性
功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
范围:任何Java应用
简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

1.1 中间层框架、万能胶
struts2
spring
hibernate
1.2 容器框架
JavaBean 项目中的一个个类
IOC和AOP

代码:
依赖:
pom.xml

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>4.3.10.RELEASE</version>
</dependency>

安装插件。
可以使用eclipse商城下载
spring-context.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"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">

</beans>

UserBizImpl1.java

package com.bk201.ioc.biz.impl;

import com.bk201.ioc.biz.UserBiz;

public class UserBizImpl1 implements UserBiz{

	@Override
	public void upload() {
    System.out.println("实现用户上传功能");		
	}

}

UserBizImpl2.java

package com.bk201.ioc.biz.impl;

import com.bk201.ioc.biz.UserBiz;

public class UserBizImpl2 implements UserBiz{

	@Override
	public void upload() {
	System.out.println("优化性能的代码");
    System.out.println("实现用户上传功能");		
	}

}

UserBiz.java

package com.bk201.ioc.biz;
/**
 * 通过企业的案例来讲解使用spring ioc 的必要性
 * v1.0:实现游戏的上传功能
 * v2.0:对游戏的上传功能进行优化
 * 
 * 
 * 
 * ioc的具体体现
 * @author Felling
 *
 */
public interface UserBiz {
	public void upload();
}

spring-context.xml加bean

<bean class="com.myy.ioc.biz.impl.UserBizImpl2" id="userBiz"></bean>
	<bean class="com.myy.ioc.web.UserAction" id="ttt">
         <property name="userBiz"  ref="userBiz"></property>
	</bean>
	
	<bean class="com.myy.ioc.web.OrderAction" id="xxx">  
         <property name="userBiz"  ref="userBiz"></property>
	</bean>
	

测试类
IocTest.java

package com.bk201.ioc.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.bk201.ioc.web.OrderAction;
import com.bk201.ioc.web.UserAction;

public class IocTest {
public static void main(String[] args) {
//	UserAction userAction=new UserAction();
//	userAction.upload();
	
	
	
	ApplicationContext springContext=new ClassPathXmlApplicationContext("/spring-context.xml");
	 UserAction userAction = (UserAction) springContext.getBean("ttt");
	 OrderAction orderAction = (OrderAction) springContext.getBean("xxx");
	 userAction.upload();
	 orderAction.upload();
//	 userAction.test1();
}
}

在这里插入图片描述
spring注入方式
UserAction.java

package com.bk201.ioc.web;

import java.util.List;

import com.bk201.ioc.biz.UserBiz;
import com.bk201.ioc.biz.impl.UserBizImpl1;
/**
 * IOC的注入放肆及各类类型
 * set注入
 *     基本类型与String
 *     数组
 *     自定义类型
 *     
 * 构造注入
 * 
 * 
 * 自动装配
 *     spring4之后出现的
 *     byType:根据配置的Bean中的接口,在soring的上下文中寻找对应的实现类
 *     byName:根据配置的Bean中的接口名字,在spring的上下文中寻找对应的实现类
 *     
 * @author Felling
 *
 */
public class UserAction {
	private UserBiz userBiz;
	private String uname;
	private int age;
	private List<String> hobby;
	
	
	
	
	
	//构造器
public UserAction(String uname, int age) {
		super();
		this.uname = uname;
		this.age = age;
	}

public UserAction() {
	super();
	// TODO Auto-generated constructor stub
}

	//    public String getUname() {
//		return uname;
//	}
//	public void setUname(String uname) {
//		this.uname = uname;
//	}
//	public int getAge() {
//		return age;
//	}
//	public void setAge(int age) {
//		this.age = age;
//	}
	public List<String> getHobby() {
		return hobby;
	}
	public void setHobby(List<String> hobby) {
		this.hobby = hobby;
	}
	public UserBiz getUserBiz() {
		return userBiz;
	}
	public void setUserBiz(UserBiz userBiz) {
		this.userBiz = userBiz;
	}



	//	private UserBiz userBiz =new UserBizImpl1();
	public void upload() {
		userBiz.upload();
	}
	/**
	 * 注入问题
	 */
	public void test1() {
		System.out.println(this.uname);
		System.out.println(this.age);
		System.out.println(this.hobby);
	}
	
}

spring-context.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"
	xmlns:aop="http://www.springframework.org/schema/aop"
	default-autowire="byName"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">

	<bean class="com.bk201.ioc.biz.impl.UserBizImpl2" id="userBiz"></bean>
	<bean class="com.bk201.ioc.web.UserAction" id="ttt">
	     <!-- set注入用property标签 -->
         <property name="userBiz"  ref="userBiz"></property>
         <!-- <property name="uname" value="zs"></property> -->
          <!-- <property name="age" value="18"></property> -->
           <!--构造注入用constructor-arg标签 -->
           <constructor-arg name="uname" value="ls"></constructor-arg>
           <constructor-arg name="age" value="21"></constructor-arg>
           <property name="hobby" >
               <list>
                 <value>吃饭</value>
                 <value>睡觉</value>
                  <value>打豆豆</value>
               </list>
           </property>
	</bean>
	
	<bean class="com.bk201.ioc.web.OrderAction" id="xxx">  
         <property name="userBiz"  ref="userBiz"></property>
	</bean>
	
	
</beans>

spring与web容器的整合原理
SpringLoaderListener.java

package com.bk201.ioc.listener;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * spring 作为管理整个工程所有的javabean,那么如何在用户发送请求的时候能够访问到指定的javabean
 * 处理方式:
 * 在监听器中 将 spring的上下文交给tomcat的上下文进行管理
 * 浏览器--->request-->servletContest-->springContext-->任意的javaBean
 * 
 * @author Felling
 *
 */
@WebListener
public class SpringLoaderListener implements ServletContextListener {

	@Override
	public void contextInitialized(ServletContextEvent sce) {
		System.out.println("tomcat一启动就触发...");
		ServletContext tomcatContext = sce.getServletContext();
		String springXmlLocation = tomcatContext.getInitParameter("springXmlLocation");
        System.out.println("spring的上下文配置文件:"+springXmlLocation);
        ApplicationContext springContext = null;
        if(springXmlLocation == null || "".equals(springXmlLocation)) {
            springContext = new ClassPathXmlApplicationContext("/spring-context.xml");
        }else {
          springContext = new ClassPathXmlApplicationContext(springXmlLocation);
        }
		
		tomcatContext.setAttribute("spring_key", springContext);
		
	}
}

UserServlet.java

package com.bk201.ioc.web;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.context.ApplicationContext;

@WebServlet("/user")
public class UserServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	doPost(req, resp);
}

@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("处理用户请求");
	    ApplicationContext springContext = (ApplicationContext) req.getServletContext().getAttribute("spring_key");
		UserAction userAction=(UserAction) springContext.getBean("xxx");
		userAction.upload();
	}
}

web.xml

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

  <display-name>Archetype Created Web Application</display-name>
   <context-param>
     <param-name>springXmlLocation</param-name>
     <param-value>/spring-other.xml</param-value>
   </context-param>  
</web-app>

在这里插入图片描述

基于SSM框架的智能家政保洁预约系统,是一个旨在提高家政保洁服务预约效率和管理水平的平台。该系统通过集成现代信息技术,为家政公司、家政服务人员和消费者提供了一个便捷的在线预约和管理系统。 系统的主要功能包括: 1. **用户管理**:允许消费者注册、登录,并管理他们的个人资料和预约历史。 2. **家政人员管理**:家政服务人员可以注册并更新自己的个人信息、服务类别和服务时间。 3. **服务预约**:消费者可以浏览不同的家政服务选项,选择合适的服务人员,并在线预约服务。 4. **订单管理**:系统支持订单的创建、跟踪和管理,包括订单的确认、完成和评价。 5. **评价系统**:消费者可以在家政服务完成后对服务进行评价,帮助提高服务质量和透明度。 6. **后台管理**:管理员可以管理用户、家政人员信息、服务类别、预约订单以及处理用户反馈。 系统采用Java语言开发,使用MySQL数据库进行数据存储,通过B/S架构实现用户与服务的在线交互。系统设计考虑了不同用户角色的需求,包括管理员、家政服务人员和普通用户,每个角色都有相应的权限和功能。此外,系统还采用了软件组件化、精化体系结构、分离逻辑和数据等方法,以便于未来的系统升级和维护。 智能家政保洁预约系统通过提供一个集中的平台,不仅方便了消费者的预约和管理,也为家政服务人员提供了一个展示和推广自己服务的机会。同时,系统的后台管理功能为家政公司提供了强大的数据支持和决策辅助,有助于提高服务质量和管理效率。该系统的设计与实现,标志着家政保洁服务向现代化和网络化的转型,为管理决策和控制提供保障,是行业发展中的重要里程碑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值