네 가지 방법 springAOP에서 빈의 두 가지 구성의 XML 버전이 자동으로 주입하여 만든 원두 주석이 자동으로 개체 빈 객체가 주입 스프링 의존성 주입 특성 세 가지 방법을 주입

1.Spring 의존성 삽입 (Dependency Injection)

1.1 스프링 무엇입니까

그것은 경량 컨테이너 프레임과 IOC (DI)와 AOP이다

IOC : 제어의 반전은 우리 자신의 새로운 객체는 이제 콩 방법을 만들 수하는 데 사용, 봄을 생성하는 데 도움이하는 것입니다

DI : 그것은 종속성 주입 용기 프레임 이후 스프링, 빈 (로딩 객체) 컨테이너 프레임 내 좋은 오브젝트 생성을 위해 스프링, 우리는 프로세스에 주입 해당 클래스 좋은 개체를 만들

AOP : Aspect 지향 프로그래밍

AOP의 사용 시나리오 :

트랜잭션 관리

로그 관리

성능 제어

DI DI 1.2 스프링

주입 방법 1.2.1 세트 (시작)

전에

applicationContext.xml 세트 구성에있어서 통과 안에 생성 된 클래스 객체 클래스의 완전한 이름 발견
<빈 ID = "userService"클래스 = "... UserServiceImpl">

    
  
UserController{

​	private UserService userService;
// 默认就是 通过set属性传值 
​	void setUserService(UserService userService){

​    		this.userServicer = userService;
     }
}

1.2.2 생성자 삽입

인덱스 index 주입

 注意value 值对应类型   索引从0开始
<constructor-arg index="0" value="123"></constructor-arg>

name 매개 변수 이름 주입

  
<constructor-arg name="id" value="456"></constructor-arg>

타입 분사식

若是有多个相同的类型 依次添加值即可
 <constructor-arg type="java.lang.Long" value="111"></constructor-arg>

이는 주입 1.2.3 클래스 속성

属性注入:  最常用就是基本类型和引用类型注入
 //基本数据类型注入
   <property name="id" value="111"></property>
   <property name="name" value="康康"></property>
// ref  引用一个对象    
   <property name="hellobean" ref="hb"></property>
   <property name="hellobean">
     //直接注入一个对象
          <bean class="xxxx"></bean>
    </property>

 <!-- 数组注入方式1  属性注入底层还是使用的set方法-->
<property name="strings" value="A,B,B,B"></property

                <!-- 数组注入方法二-->
<property name="strings">
<array >
<value>是尼玛 </value>
<value>是我</value>
</array>
</property>
 <!-- 集合注入方法-->
<property name="list">
<list>
    <value>你让我说点啥好</value>
    <value>你让我说点啥好</value>
    <!--创建的对象 每次都是不同的对象-->
    <bean class="_01_di.cn.itsource.HelloBean"></bean>
    <bean class="_01_di.cn.itsource.HelloBean"></bean>
    <!-- 引用的两个地址是一样的 -->
    <ref bean="hello"></ref>
    <ref bean="hello"></ref>
</list>

 <!-- 集合注入方法 set-->
<property name="set">
 <set>
 <value>小胡</value>
 <value>小胡</value>
 // 注入一个bean对象 注入的对象地址都是不同的
      <bean class="_01_di.cn.itsource.HelloBean"></bean>
     <bean class="_01_di.cn.itsource.HelloBean"></bean>
     // 引用的地址是一样的
     <ref bean="hello"></ref>
     <ref bean="hello"></ref>
 </set>


<!-- map传值-->
<property name="hp">
<map>
<entry key="小胡" value="小幸福"></entry>
<entry key="小长" value="陆小凤"></entry>
</map>

</property>


注入properties
// 不支持中文
<property name="prop1">
<value>
driverClassName=com.mysql.jdbc.Driver
username=qiang强
</value>
</property> 
<property name="prop2">
//支持中文
<props>
<prop key="driverClassName">com.mysql.jdbc.Driver</prop>
<prop key="username">qiang强</prop>
</props>
</property>

자동 주입의 1.3 XML 버전

캔 요소 별명이 - 자동으로 이름으로 주입
또는 byType와 주입 - 자동 주사기의 종류에 따라 (기본 byType와 임)
= "요소 별명"콩 현재의 모든 설정 파일이 적용 걸린다 루트 콩 기본적으로 자동으로 묶어
은 현재의 자식 노드 빈 자동으로 묶어 = "byType와를" 발효 콩

우리가 다른 콩에 콩을 주입해야하는 경우 일반적으로이 설정 방법을 주입 또는 생성자에 의해 수행, 사실, 또한 봄 콩이 자동으로 주입 지원합니다. 당신이 빈을 정의 할 때 우리는 당신이 콩 자동으로 묶어 속성 요소에 의해 관련 콩에 자동으로 분사 현재 콩할지 여부를 지정할 수 있습니다. 옵션 값을 자동으로 묶어 네 가지 속성이 있습니다.

  • 번호 : 기본값. 이것은 자동적 인 주사를 의미한다.
    • 요소 별명 : 이름 자동 주입. 지정하는 beanA setBeanB () 메소드와 같은 경우에 자동으로 묶어 = "요소 별명"봄 자동 setBeanB beanA 법에 의해 자동 주입 빈 컨테이너 "beanB"라는 빈을 찾는다.
    • byType와 : 종류에 따라 자동 주입. 지정된 자동으로 묶어 = "byType와"Spring 빈 컨테이너 것이다 콩 setBeanB ()에있어서의 자동 BeanB 타입 beanA 분사에 BeanA setBeanB (BeanB의 b)의 방법 으로서는. 빈 컨테이너의 BeanB 케이스 2 종 이상이있는 경우 그러나 예외가 발생합니다. 두 가지 방법이있는 경우는 주입 이름을 사용할 수있을 때 바엔의 동일한 유형을 해결하기 위해
    • 생성자 : 자동 형 "생성자"에 따라 프로그램을 통해 공법 주입 = 자동으로 묶어 지정 byType와 동등한 경우는 제외.

자세한 XML


    <bean id="userController" class="_02_autoxml.cn.itsource.UserController" autowire="byType">
        <!--<property name="userService" ref="service"></property>-->
    </bean>

    <bean id="userDao" class="_02_autoxml.cn.itsource.UserDao"></bean>

    <bean id="userService" class="_02_autoxml.cn.itsource.UserServiceImpl">
       <!-- <property name="userDao" ref="dao"></property>-->
    </bean>


버전 1.4 XML 주입 노트

扫描包路径  扫描注解:
        @Component 普通类上面打的注解(普通仓库), @Repository, @Service,@Controller
<context:component-scan base-package="_03_annoxml.cn.itsource"></context:component-scan>

인터페이스는 케이스의 두 가지 구현이있는 경우 :

       方案一:一个接口有多个实现的情况下面 通过名字去区分
       方案二:通过Resource这个注解
       区别:@Autowired@Qualifier 都是属于spring的注解 ,
          Resource使用jdk的注解 推荐使用Autowired和Qualifier,可以和spring进行无缝衔接
          autowired默认是根据类型匹配,如果类型匹配不上在根据名字匹配
          而Resource默认根据名字匹配,名字匹配不上就匹配类型

2 스프링 AOP는 내부 기능

2.1 springAOP 무엇입니까

AOP :의 지향 프로그래밍 섹션
AOP를 밖으로 OOP (객체 지향 프로그래밍)을 교체하지 않을 경우, 그것은 일부 (또는 매우 어려운 해결하기 위해) 할 수없는 우리의 해결 OOP (객체 지향)의 일부를 해결하기 위해 보완 역할입니다 코드입니다.
AOP의 사용은 논리적 설명의 단면이 더 추상적 될 수있다 (크로스 커팅 로직 응용 프로그램) 특정 상황에서 존재의이 또 다른 특정 지점을 만들어 보자, AOP는 성능 모니터링 및 기타 장소, 트랜잭션 관리, 로그 관리에 사용할 수 있습니다 .

2.2aop 구현

프록시 모드는 기본 AOP를 구현

프록시 모드를 JDK - 인터페이스 케이스

CGLIB의 동적 프록시 - 아니 인터페이스의 경우

2.3 springaop 구성

구성의 XML 버전

// 扫描主键
<context:component-scan base-package="_04_aopxml"></context:component-scan>
    <aop:config>
       // 在哪里切入
        <aop:pointcut id="pointcut" expression="execution(* _04_aopxml.I*Service.*(..))"></aop:pointcut>
        <!--配置通知  引用事务管理--> 
        <aop:aspect ref="txManager">
            <!-- 前置通知-->
            <!--<aop:before method="begin" pointcut-ref="pointcut"></aop:before>
            &lt;!&ndash; 后置通知&ndash;&gt;
            <aop:after-returning method="commit" pointcut-ref="pointcut"></aop:after-returning>
            &lt;!&ndash; 最终通知&ndash;&gt;
            <aop:after method="close" pointcut-ref="pointcut"></aop:after>
            &lt;!&ndash; 异常通知&ndash;&gt;
            <aop:after-throwing method="rollback" throwing="e" pointcut-ref="pointcut"></aop:after-throwing>-->
            <!-- 环绕通知-->
            <aop:around method="around" pointcut-ref="pointcut"></aop:around>
        </aop:aspect>
    </aop:config>
    <bean id="txManager" class="_04_aopxml.TxManager"></bean>

구성의 주석 버전

@Component
@Aspect
public class TxManager {

   // 在哪里切入 执行
    @Pointcut("execution(* _05_aopanno.I*Service.*(..))")
    //切入点
    public void pointcut(){}

    //<aop:before method="begin" pointcut-ref="pointcut"></aop:before>
    //@Before("pointcut()")
    public void begin(){
        System.out.println("开启事务");
    }

  ///  @After("pointcut()")
    public void commit(){
        System.out.println("提交事务");
    }
    //@AfterReturning("pointcut()")
    public void close(){
        System.out.println("关闭");
    }
    //所有的异常的父类
   // @AfterThrowing(value = "pointcut()",throwing = "e")
    public void rollback(Throwable e){
        System.out.println("回滚事务"+e.getMessage());
    }

    //环绕通知
    @Around("pointcut()")
    public void around(ProceedingJoinPoint joinPoint){
        try {
            begin();
            //调用方法
            joinPoint.proceed();
            commit();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }finally{
            close();
        }
    }
}

콩 방법을 만들 수 3

이전 모델 :의 방법으로 새로운 객체를 생성

봄 패션 : 도움에 봄 우리는 빈을 만들 수 있습니다. - 빈의 방법을 만들기

3.1 콩 방법을 만들어

인수가없는 생성자로 콩을 만들려면 - 가장 일반적인 방법을

구성

<bean id="mybean" class="_06_bean.Mybean"></bean>

3.2 Bean을 생성하는 두 번째 방법

의 FactoryBean 팩토리 객체

 //实现 FactoryBean
public class MybeanFactoryBean implements FactoryBean<Mybean> {
    //返回对象
    public Mybean getObject() throws Exception {
        return new Mybean("xxx", "18");
    }
   
    public Class<?> getObjectType() {
        return Mybean.class;
    }
    //是否单例
    public boolean isSingleton() {
        return true;
    }
}

3.3 Bean을 만드는 세 가지 방법

정적 메소드를 정의하는 빈 클래스를 얻으려면

public class MybeanFactory {

    public static Mybean getBean(){
        return new Mybean();
    }
}
<bean class="_06_bean.MybeanFactory" factory-method="getBean"></bean>

3.4 Bean을 만들 수있는 네 가지 방법

public class MybeanFactory1 {
    //普通方式
    public  Mybean getBean1(){
        return new Mybean();
    }
}
<bean class="_06_bean.MybeanFactory1" id="mybeanFactory1"></bean>
    <bean factory-bean="mybeanFactory1" factory-method="getBean1"></bean>
public class MybeanFactory1 {
    //普通方式
    public  Mybean getBean1(){
        return new Mybean();
    }
}
<bean class="_06_bean.MybeanFactory1" id="mybeanFactory1"></bean>
    <bean factory-bean="mybeanFactory1" factory-method="getBean1"></bean>
게시 23 개 원래 기사 · 원 찬양 2 · 조회수 937

추천

출처blog.csdn.net/metjoyful/article/details/101293400