Spring基于注解的配置

Spring 中为了减少 XML 配置,可以声明一个配置类类对 bean 进行配置,主要用到两个注解 @Configuration 和 @bean,例子:

首先,XML 中增加如下的配置来启动 java 配置:

<context:component-scan base-package = "com.shiyanlou.demo.config"/>

定义一个配置类,用 @Configuration 注解该类,等价于 XML 里的 beans,用 @Bean 注解方法,等价于 XML 配置的 bean,方法名等于 bean Id。创建包 com.shiyanlou.demo.config,然后依次创建 SpringConfig.java、Service.java 和 Client.java,代码如下:
SpringConfig.java:

package com.shiyanlou.demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SpringConfig {

    @Bean
    public Service service(){
        return new Service();
    }
    @Bean
    public Client client(){
        return new Client();
    }
}

Service.java:

package com.shiyanlou.demo.config;

public class Service {
    public String  sayHello(){
        return "HelloWord!";
    }
}

Client.java:

package com.shiyanlou.demo.config;

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

public class Client {
    @Autowired
    Service service;
    public void invokeService(){
        System.out.println("client invoke :" + service.sayHello());
    }

}

最后修改 App.java 的代码:

package com.shiyanlou.demo;

import com.shiyanlou.demo.config.Client;
import com.shiyanlou.demo.config.SpringConfig;
import com.shiyanlou.demo.helloworld.HelloWorld;
import com.shiyanlou.demo.entity.Dog;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;

public class App {

    public static void main(String[] args) {

        ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
        Client client = context.getBean("client", Client.class);
        client.invokeService();
    }
}

运行

mvn compile
mvn exec:java -Dexec.mainClass="com.shiyanlou.demo.App"

实验结果如下所示:

原文地址:https://www.cnblogs.com/sakura579/p/13965026.html