zoukankan      html  css  js  c++  java
  • Spring

    Spring

    1、介绍

    Spring是业务层框架,在web开放领域使用广泛。Spring中设计两个思想,AOP和IOC。Spring是容器技术,提供强大的Bean管理机制。

    2、体验Spring

    1. 引入maven依赖

      <?xml version="1.0" encoding="UTF-8"?>
      <project xmlns="http://maven.apache.org/POM/4.0.0"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                                   http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
      
        <groupId>com.oldboy</groupId>
        <artifactId>myspring</artifactId>
        <version>1.0-SNAPSHOT</version>
      
        <dependencies>
          <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
          </dependency>
      
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>4.3.5.RELEASE</version>
          </dependency>
          <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.8.10</version>
          </dependency>
          <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>1.6.1</version>
          </dependency>
        </dependencies>
      </project>
      

    2. 创建javabean

      [WelcomeService]

      public interface WelcomService {
        public void sayHello() ;
      }
      

      [WelcomeServiceImpl]

      package com.oldboy.spring.service;
      
      import org.springframework.context.annotation.Scope;
      import org.springframework.stereotype.Service;
      
      import javax.annotation.Resource;
      
      /**
       * 实现类
       */
      @Service("welcomeService")
      @Scope(value = "singleton")
      public class WelcomeServiceImpl implements WelcomService {
        private String name ;
      
        @Resource(name="byeService")
        private ByeService bs ;
      
        public WelcomeServiceImpl(){
          System.out.println("1111");
        }
        public WelcomeServiceImpl(String str){
          System.out.println("2222");
        }
        public WelcomeServiceImpl(String str ,Integer str2){
          System.out.println("3333");
        }
        public WelcomeServiceImpl(Integer i , String str){
          System.out.println("4444");
        }
        public WelcomeServiceImpl(Integer i , int str){
          System.out.println("5555");
        }
      
        public String getName() {
          return name;
        }
      
        public void setName(String name) {
          this.name = name;
        }
      
        public ByeService getBs() {
          return bs;
        }
      
        public void setBs(ByeService bs) {
          this.bs = bs;
        }
      
        public void sayHello() {
          bs.sayBye();
        }
      }
      

      [ByeService]

      public interface ByeService {
        public void sayBye();
      }
      

      [ByeServiceImpl]

      package com.oldboy.spring.service;
      
      import org.springframework.context.annotation.Scope;
      import org.springframework.stereotype.Service;
      
      /**
       */
      @Service("byeService")
      @Scope("singleton")
      public class ByeServiceImpl implements ByeService {
      
        public ByeServiceImpl(){
          System.out.println("new ByeServiceImpl()");
        }
      
        private String bye ;
      
        public String getBye() {
          return bye;
        }
      
        public void setBye(String bye) {
          this.bye = bye;
        }
      
        public void sayBye() {
          System.out.println(bye);
        }
      }
      

    3. 创建配置文件

      <?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="welcomeService" 
              class="com.oldboy.spring.service.WelcomeServiceImpl" scope="prototype">
          <constructor-arg type="int" value="1" index="1" />
          <constructor-arg type="java.lang.Integer" value="12" index="0"/>
          <property name="name" value="tomas" />
          <!-- 配置依赖关系 -->
          <property name="bs" ref="byeService" />
        </bean>
        <!--  -->
        <bean id="byeService" class="com.oldboy.spring.service.ByeServiceImpl">
          <property name="bye" value="byebye!!" />
        </bean>
      </beans>
      

    4. 测试方法

      public static void main(String[] args) {
        ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml") ;
        WelcomService ws = (WelcomService) ac.getBean("welcomeService");
        ws.sayHello();
      
        ws = (WelcomService) ac.getBean("welcomeService");
        ws.sayHello();
      
        ByeService bs = (ByeService) ac.getBean("byeService");
        bs.sayBye();
      }
      

    3、IOC和AOP

    Spring有两个核心思想,IOC和AOP。

    • IOC

      inverse of control,反转控制,获得依赖对象的方式同传统方式是相反的。传统方式是从上到下按序依赖的,spring创建对象的方式是从下到上的依赖方式。并且对象的创建是有spring容器来完成。

    • AOP

      aspect of control,面向切面编程,目的是不改变源代码,还为类增加新的功能。底层是通过Java的代理技术实现的。

    4、AOP编程

    4.1 原始编程手段

    1. 定义通知

      package com.oldboy.spring.aop.service;
      
      import org.springframework.aop.MethodBeforeAdvice;
      import java.lang.reflect.Method;
      /**
       * 前置通知:方法前通知
       */
      public class MyMethodBeforeAdvice  implements MethodBeforeAdvice{
        public void before(Method method, Object[] args, Object target) throws Throwable {
          System.out.println("hello world!!!");
        }
      }
      

    2. 配置文件

      <?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: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/context
          http://www.springframework.org/schema/context/spring-context-4.3.xsd">
        <!-- 前置通知 -->
        <bean id="beforeAdvice"
              class="com.oldboy.spring.aop.service.MyMethodBeforeAdvice" />
      
        <!-- 目标对象 -->
        <bean id="welcomeServiceTarget" 
              class="com.oldboy.spring.aop.service.WelcomeServiceImpl" />
        
         <!-- 代理对象-->
        <bean id="welcomeService"
              class="org.springframework.aop.framework.ProxyFactoryBean">
          <!-- 代理接口集合 -->
          <property name="proxyInterfaces">
            <list>
              <value>com.oldboy.spring.aop.service.WelcomeService</value>
            </list>
          </property>
          <!-- 拦截器名称集合 -->
          <property name="interceptorNames">
            <list>
              <value>beforeAdvice</value>
              <value>afterAdvice</value>
              <value>aroundAdvice</value>
              <value>throwsAdvice</value>
            </list>
          </property>
          <!-- 指定目标对象 -->
          <property name="target" ref="welcomeServiceTarget" />
        </bean>
      </beans>
      

    3. 测试类

      public static void main(String[] args) {
        ApplicationContext ac = new ClassPathXmlApplicationContext("aop.xml");
        WelcomeService ws = (WelcomeService) ac.getBean("welcomeService");
        ws.sayHello("tomas");
      }
      

    4.2 pojo+xml方式

    1. 定义pojo

      package com.oldboy.spring.aop2;
      
      import org.aspectj.lang.JoinPoint;
      
      /**
       * 观众 , pojo
       */
      public class Audience {
        //坐下
        public void sitdown(){
          System.out.println("sitdown");
        }
      
        //关机
        public void turnoffCellphone(JoinPoint jp){
          String method = jp.getSignature().getName();
          Object[] args = jp.getArgs();
          Object targ = jp.getTarget() ;
          Object proxy = jp.getThis() ;
      
          System.out.println("turnoffCellphone");
        }
      
        public void applaud(){
          System.out.println("applaud");
        }
      
        public void payOff(){
          System.out.println("退票");
        }
      
        public  void goHome(){
          System.out.println("goHome");
        }
      }
      

    2. 定义目标类和接口

      public interface Actor {
      	public void show() ;
      }
      
      public class Singer implements Actor{
      	public void show() {
      		System.out.println("~~~~啦啦啦");
      		String s = null ;
      		s.toLowerCase();
      	}
      }
      
      

    3. 配置文件

      <?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-4.3.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 id="audience" class="com.oldboy.spring.aop2.Audience" />
      
        <!-- 歌手 -->
        <bean id="singer" class="com.oldboy.spring.aop2.Singer" />
      
        <aop:config>
          <aop:aspect id="audienceAspect" ref="audience">
            <!--  定义切入点-->
            <!-- expression="execution(* com.oldboy.spring.aop2.*Service.*(..))" -->
            <!-- expression="execution(* *..*Service.*(..))" -->
            <aop:pointcut id="audiencePointCut" 
                         expression="execution(* com.oldboy.spring.aop2.Actor.show())" />
      
            <!-- 定义通知 -->
            <aop:before method="sitdown" pointcut-ref="audiencePointCut" />
            <aop:before method="turnoffCellphone" pointcut-ref="audiencePointCut" />
            <aop:after-returning method="applaud" pointcut-ref="audiencePointCut" />
            <aop:after-throwing method="payOff" pointcut-ref="audiencePointCut" />
            <aop:after method="goHome" pointcut-ref="audiencePointCut"/>
          </aop:aspect>
        </aop:config>
      </beans>
      

    4. 测试

      public static void main(String[] args) {
        ApplicationContext ac = new ClassPathXmlApplicationContext("aop2.xml");
        Actor actor = (Actor) ac.getBean("singer");
        actor.show();
      }
      

  • 相关阅读:
    Minimum Depth of Binary Tree leetcode java
    Maximum Depth of Binary Tree leetcode java
    Symmetric Tree leetcode java
    Same Tree leetcode java
    Binary Tree Postorder Traversal leetcode java
    Binary Tree Preorder Traversal leetcode java
    Binary Tree Inorder Traversal leetcode java
    Combinations leetcode java
    一键清除Centos iptables 防火墙所有规则
    阿里云centos7.7x64安装open,并配置ip转发和nat伪装
  • 原文地址:https://www.cnblogs.com/xupccc/p/9661963.html
Copyright © 2011-2022 走看看