天天看点

Spring_学习06

使用注解开发-Spring

使用注解开发-Spring

一. 使用xml文件

1.1 引入spring-aop包:

在Spring4之后, 想要使用注解开发, 需要引入aop包

Spring_学习06

一般推荐直接导入spring-webmvc,这个包中包含了大部分spring所需要的包:

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-webmvc</artifactId>
	<version>5.3.12</version>
</dependency>
           

1.2 配置文件annotationContext.xml

除了最基本的约束以外, 还需要加入context的约束:

<?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.xsd">
</beans>
           

1.3 Bean的实现,属性注入,自动装配,设置作用域

在配置文件中开启指定注解扫描的包:

<!--    扫描com.ctgu包下的所有的注解-->
    <context:component-scan base-package="com.ctgu"/>
           

在开启扫描的包下的User类中增加注解:@Component

@Data
//lombok
@Component(value = "user666")
//相当于在配置文件中添加了一句: <bean id="user666" class="com.ctgu.pojo.User">...</bean>
@Scope("singleton")
//设置作用域
public class User {
    @Value("翁博梁")
    //相当于添加属性: <property name="name" value="翁博梁"/>
    private String name;
    private Dog dog;

    @Autowired
    //相当于添加属性: <property name="dog" ref="dog"/>
    public void setDog(Dog dog) {
        this.dog = dog;
    }
}
           

Dog类

@Data
@Component
public class Dog {
    @Value("豆豆")
    private String name;
}
           

1.4 一些注解的衍生注解

@Component的三个衍生注解

  • @Controller - controller层
  • @Service - service层
  • @Respository - dao层

功能大体相同, 一般作用于不同的层

UserService类

@Data
@Service
public class UserService {
    @Value("userService")
    private String name;
}
           

1.5 测试

测试类

@Test
public void test(){
	ApplicationContext context = new ClassPathXmlApplicationContext("annotationContext.xml");
	System.out.println(context.getBean("user666"));
	System.out.println(context.getBean("dog"));
	System.out.println(context.getBean("userDao"));
	System.out.println(context.getBean("userService"));
	System.out.println(context.getBean("userController"));
}
           

测试结果

User(name=翁博梁, dog=Dog(name=豆豆))
Dog(name=豆豆)
UserDao(name=userDao)
UserService(name=userService)
UserController(name=userController)
           

二. JavaConfig(不使用xml文件)

使用

@Bean

注释来配置Bean的定义,

@Bean

就相当于

<bean/>

元素。

@Configuration

注解一个类表明它主要作为 bean 定义的来源。此外,

@Configuration

类允许通过调用@Bean同一类中的其他方法来定义 bean 间的依赖关系。最简单的

@Configuration

类如下:

2.1 定义配置类

SpringConfig类

@ComponentScan("com.ctgu")//扫描该包下使用@Component注解定义的bean
@Configuration
public class SpringConfig {
    @Bean//通过@Bean注解来定义bean
    public Dog dog(){
        return new Dog();
    }
}

           

2.2 定义实体类

定义的实体类:

User使用的是@Component注解

@Component
@Data
public class User {

    @Value("翁博梁")
    private String username;

    private Cat cat;
    private Dog dog;

    @Autowired
    public void setCat(Cat cat) {
        this.cat = cat;
    }
    @Autowired
    public void setDog(Dog dog) {
        this.dog = dog;
    }
}
           

Cat使用的是@Component注解

@Data
@Component
public class Cat {
    @Value("球球")
    private String name;
}
           

Dog使用的是@Bean注释, 在SpringConfig类中

@Data
public class Dog {
    private String name = "豆豆";
}
           

2.3 定义测试类

测试类

@Test
public void test(){
	ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
	System.out.println(context.getBean("user"));
	System.out.println(context.getBean("cat"));
	System.out.println(context.getBean("dog"));
}
           

测试结果

User(username=翁博梁, cat=Cat(name=球球), dog=Dog(name=豆豆))
Cat(name=球球)
Dog(name=豆豆)
           

2.4 引入其他配置类

@Configuration
@Import(SpringConfig.class)
public class SpringConfig2 {
}
           
上一篇: JAVA问题
下一篇: GC安全点