Spring 注解

Spring 2.5 之后加入了对注解的支持,省去了繁琐的 XML 文件配置。

注解方式的出现引出了一个问题:使用注解的方式比使用 XML 配置的方式更好吗?
简洁的回答是这依赖于不同的场景。
详细的回答是,这两种方法都有优点和缺点,通常情况由开发者根据选择适合他们的方法。根据他们不同的方式,注解在声明中提供了大量的上下文,从而能够得到更简洁的配置。然而 XML 能够配置部件而不需要去修改和重新编译源码。一些开发者倾向于将配置信息于源码关联在一起但一些开发者声称这些被注解的类不再是 POJO,更麻烦的是,这些配置变得分散从而难以控制。

选择哪种方法并不重要,Spring 可以兼容两种风格,通过配置选项,Spring 允许用非侵入式方法,即能够在不修改源码的情况下使用注解。所有的配置风格都被 Spring 的 Tool Suite 支持。

  • 注意:如果同时使用两种方式,XML 的配置会覆盖基于注解的配置

  • 使用 XML 进行注入的过程:
    首先有两个类,HelloWorld 和 HelloWorldService

HelloWorldService.java

package com.zack.springdemo;

public class HelloWorldService {
  private HelloWorld hw;

  public void say() {
    hw.sayHello();
  }

  public void setHw(HelloWorld hw) {
    this.hw = hw;
  }
}

HelloWorld.java

package com.zack.springdemo;

public class HelloWorld {
   public void sayHello() {
     System.out.println("hello");
   }
}

Beans.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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">

   <bean id="helloWorldService" class="com.zack.springdemo.HelloWorldService">
       <property name="hw" ref="helloWorld"></property>
   </bean>
   <bean id="helloWorld" class="com.zack.springdemo.HelloWorld"></bean>

</beans>

App.java

package com.zack.springdemo;

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

public class App {
  public static void main(String[] args) {
    ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
    HelloWorldService hws = (HelloWorldService) context.getBean("helloWorldService");
    hws.say();
  }
}

  • 使用注解

HelloWorldService.java

package com.zack.springdemo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class HelloWorldService {
  @Autowired
  private HelloWorld hw;

  public void say() {
    hw.sayHello();
  }
}

HelloWorld.java

package com.zack.springdemo;

import org.springframework.stereotype.Component;

@Component
public class HelloWorld {
   public void sayHello() {
     System.out.println("hello");
   }
}

Beans.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:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-4.0.xsd">

    <context:component-scan base-package="com.zack.springdemo"/>

</beans>

在这里通过

<context:component-scan base-package="com.zack.springdemo"/>

配置让 spring 去扫描 com.zack.springdemo 包, 启用注释驱动 Bean 定义和注释驱动 Bean 的自动注入。所以这里的 xml 就可以省去 bean 的定义和属性配置。

官方文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值