目录
安全技术方面:Shiro springSecurity
数据库层面:hibernate/mybatis SpringDataJpa
消息中间件:activityMQ、RabbitMQ、kaffka spring..MQ
Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。
Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。
然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
目的:解决企业应用开发的复杂性
功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
范围:任何Java应用
简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
3.1 id:在容器中查找Bean的id(唯一、且不能以/开头)
3.2 class:bean的完整类名
3.3 name:在容器中查找Bean的名字(唯一、允许以/开头、允许多个值,多个值之间用逗号或空格隔开)
3.4 scope:(singleton|prototype)默认是singleton
3.4.1 singleton(单例模式):在每个Spring IoC容器中一个bean定义对应一个对象实例
3.4.2 prototype(原型模式/多例模式):一个bean定义对应多个对象实例
3.4 abstract:将一个bean定义成抽象bean(抽象bean是不能实例化的),抽象类一定要定义成抽象bean,非抽象类也可以定义成抽象bean
3.5 parent:指定一个父bean(必须要有继承关系才行)
3.6 init-method:指定bean的初始化方法
3.7 constructor-arg:使用有参数构造方法创建javaBean
- <bean class="com.zking.web.UserAction" id="userAction">
- <property name="userBiz" ref="userBiz">property>
- <property name="age" value="22">property>
- <property name="name" value="zhangsan">property>
- <property name="hobby">
- <list>
- <value>篮球value>
- <value>boyvalue>
- <value>篮球value>
- list>
- property>
- bean>
- <bean class="com.zking.web.OrderAction" id="orderAction">
- <property name="userBiz" ref="userBiz">property>
- <constructor-arg name="name" value="zhangsan">constructor-arg>
- <constructor-arg name="age" value="22">constructor-arg>
- <constructor-arg name="hobby">
- <list>
- <value>篮球value>
- <value>boyvalue>
- <value>篮球value>
- list>
- constructor-arg>
- bean>
- <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">
-
-
-
- <bean class="com.zking.biz.impl.UserBizImpl2" id="userBiz">bean>
- <bean class="com.zking.web.UserAction" id="userAction">
- <property name="userBiz" ref="userBiz">property>
- bean>
- <bean class="com.zking.web.OrderAction" id="orderAction">
- <property name="userBiz" ref="userBiz">property>
- bean>
- beans>
- package com.zking.biz;
-
- /**
- * 用户业务类
- * 需求:
- * 同时在用户模块、订单模块拿到所有的用户数据
- *
- * 需求变更1:
- * 同时在用户模块、订单模块拿到所有的用户数据,并且要求用户数据是已经通过年龄排序了的
- * 对应策略:修改userBiz中list方法,添加排序功能
- *
- * 需求变更2:
- * 同时在用户模块、订单模块拿到所有的用户数据,并且要求用户数据是已经注册的时间点排序了的
- * 对应策略:修改userBiz中list方法,添加排序功能,按照时间点排序
- *
- * ...
- * 总结:
- * 最原始:频繁修改业务层biz层代码
- * 多实现:凡是涉及到用户业务层 调用的地方,都需要修改代码
- *
- * @author Administrator
- *
- */
- public interface UserBiz {
- void list();
- }
-
- package com.zking.biz.impl;
-
- import com.zking.biz.UserBiz;
-
- public class UserBizImpl1 implements UserBiz{
-
- @Override
- public void list() {
- System.out.println("查询用户数据,按照年龄排序。。。");
-
- }
-
- }
-
- package com.zking.biz.impl;
-
- import com.zking.biz.UserBiz;
-
- public class UserBizImpl2 implements UserBiz{
-
- @Override
- public void list() {
- System.out.println("查询用户数据,按照入职时间排序。。。");
- }
-
- }
-
- package com.zking.ioc.demo;
-
- import org.springframework.context.support.ClassPathXmlApplicationContext;
-
- import com.zking.web.OrderAction;
- import com.zking.web.UserAction;
-
- /**
- * 1.对spring框架的配置文件进行建模,建模之后,spring-context.xml中所有的javabean信息都会
- * 加载进spring 容器的上下文
- * 2.上下文中就包含了spring-context.xml 所有对象
- *
- * @author Administrator
- *
- * IOC的特点-什么叫控制反转
- * 指的是将创建对象的权利反转给spring容器来完成
- *
- */
- public class Demo1 {
- @SuppressWarnings("resource")
- public static void main(String[] args) {
- ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("/spring-context.xml");
- UserAction userAction = (UserAction)context.getBean("userAction");
- userAction.list();
-
- OrderAction orderAction=(OrderAction)context.getBean("orderAction");
- orderAction.list();
- }
- }
-
- package com.zking.ioc.demo;
-
- 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.support.ClassPathXmlApplicationContext;
-
- import com.zking.web.UserAction;
-
- /**
- * spring与web容器的整合原理
- * why:建模的过程是十分耗时的
- * 解决问题:
- * 1.建模必不可少
- * 2.建模要保障只执行一次
- * 3.建模后期望在每一个servlet都能够拿到spring的上下文对象ClassPathXmlApplicationContext
- * how:
- * 1.监听器的初始化方法
- * 2.spring的上下 要 存放 在tomcat上下文中
- *
- * @author Administrator
- *
- */
- @WebServlet("/springDemo")
- public class DemoServlet extends HttpServlet{
- @Override
- protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- // Thread.sleep(1000);
- // ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("/spring-context.xml");
- ClassPathXmlApplicationContext context=(ClassPathXmlApplicationContext) req.getServletContext().getAttribute("springContext");
- UserAction userAction = (UserAction)context.getBean("userAction");
- userAction.list();
- }
- }
-
- package com.zking.ioc.listener;
-
- import javax.servlet.ServletContext;
- import javax.servlet.ServletContextEvent;
- import javax.servlet.ServletContextListener;
-
- import org.springframework.context.support.ClassPathXmlApplicationContext;
-
- import com.zking.web.UserAction;
-
- public class SpringLoadListener implements ServletContextListener{
-
- @Override
- public void contextInitialized(ServletContextEvent sce) {
- System.out.println("初始化。。。。");
- ServletContext servletContext = sce.getServletContext();
- String springConfigLocation = servletContext.getInitParameter("springConfigLocation");
- System.out.println(springConfigLocation+"....");
- // 拿到spring上下文
- ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("/spring-context.xml");
- // 将spring上下文保存到tomcat上下文中
- servletContext.setAttribute("springContext", context);
- }
-
- }
-
- package com.zking.web;
-
- import java.util.List;
-
- import com.zking.biz.UserBiz;
- import com.zking.biz.impl.UserBizImpl1;
- import com.zking.biz.impl.UserBizImpl2;
-
- public class OrderAction {
-
- // private UserBiz userBiz=new UserBizImpl1();
-
- private UserBiz userBiz;
-
-
- public UserBiz getUserBiz() {
- return userBiz;
- }
-
-
- public void setUserBiz(UserBiz userBiz) {
- this.userBiz = userBiz;
- }
-
- private String name;
- private int age;
- private List<String> hobby;
-
- public OrderAction() {
- // TODO Auto-generated constructor stub
- }
-
- public OrderAction(String name, int age, List<String> hobby) {
- super();
- this.name = name;
- this.age = age;
- this.hobby = hobby;
- }
-
-
- public void list() {
- System.out.println(name);
- System.out.println(age);
- System.out.println(hobby);
- userBiz.list();
- }
- }
-
- package com.zking.web;
-
- import java.util.List;
-
- import com.zking.biz.UserBiz;
- import com.zking.biz.impl.UserBizImpl1;
- import com.zking.biz.impl.UserBizImpl2;
-
- /**
- * 依赖注入的三种方式
- * 1.set 注入
- * 2.构造注入
- * 3.自动装配(spring3后出现的特性)
- * byName:是通过spring管理的bean对象的ID进行查找,如果找不到则注入失败;反之成功
- * byType:是通过spring管理的bean对象接口实现类进行查找;如果没有或两个以上,则注入失败,反之成功
- *
- * default-autowire="byName"
- * @author Administrator
- *
- */
- public class UserAction {
- // private UserBiz userBiz=new UserBizImpl1();
- private UserBiz userBiz;
-
-
- public UserBiz getUserBiz() {
- return userBiz;
- }
-
-
- public void setUserBiz(UserBiz userBiz) {
- this.userBiz = userBiz;
- }
-
- private String name;
- private int age;
- private List<String> hobby;
-
-
- public String getName() {
- return name;
- }
-
-
- public void setName(String name) {
- this.name = name;
- }
-
-
- 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 void list() {
- System.out.println(name);
- System.out.println(age);
- System.out.println(hobby);
- userBiz.list();
- }
-
- public UserAction() {
- // TODO Auto-generated constructor stub
- }
- }
-
- <beans default-autowire="byName" 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">
-
-
- <bean class="com.zking.biz.impl.UserBizImpl1" id="userBiz">bean>
-
-
- <bean class="com.zking.web.UserAction" id="userAction">
- <property name="userBiz" ref="userBiz">property>
- <property name="age" value="22">property>
- <property name="name" value="zhangsan">property>
- <property name="hobby">
- <list>
- <value>篮球value>
- <value>boyvalue>
- <value>篮球value>
- list>
- property>
- bean>
-
- <bean class="com.zking.web.OrderAction" id="orderAction">
- <property name="userBiz" ref="userBiz">property>
- <constructor-arg name="name" value="zhangsan">constructor-arg>
- <constructor-arg name="age" value="22">constructor-arg>
- <constructor-arg name="hobby">
- <list>
- <value>篮球value>
- <value>boyvalue>
- <value>篮球value>
- list>
- constructor-arg>
- bean>
- beans>
-
- <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 Applicationdisplay-name>
-
- <context-param>
- <param-name>springConfigLocationparam-name>
- <param-value>/applicationContext.xmlparam-value>
- context-param>
- <listener>
- <listener-class>com.zking.ioc.listener.SpringLoadListenerlistener-class>
- listener>
- web-app>
-