一、前期准备

  • 在spring4之后,想要使用注解形式,必须得要引入aop的包

image.png

  • 在配置文件当中,还得要引入一个context约束

image.png

二、Bean的实现

配置扫描哪些包下的注解

image.png

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://www.springframework.org/schema/context
  8. http://www.springframework.org/schema/context/spring-context.xsd">
  9. <context:component-scan base-package="com.comprehensive.pojo"/>
  10. <context:annotation-config/>
  11. </beans>

Component注解

package com.comprehensive.pojo;

import org.springframework.stereotype.Component;

@Component //相当于配置文件中 <bean id="user" class="当前注解的类"/>
public class User {
    public String username = "comprehensive";
}

测试

package com.comprehensive.pojo;

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

public class PojoTest {
    @Test
    public void test() {
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        User user = context.getBean("user", User.class);
        System.out.println(user.username);
    }
}

三、注解开发的其它事项

属性注入

  • 直接在属性名上添加@value(“值”) ```java package com.comprehensive.pojo;

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

@Component //相当于配置文件中 public class User { @Value(“comprehensive”) //相当于配置文件中 public String username; }


- 如果提供了set方法,在set方法上添加@value("值")
```java
package com.comprehensive.pojo;

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

@Component //相当于配置文件中 <bean id="user" class="当前注解的类"/>
public class User {
    public String username;
    @Value("comprehensive") //相当于配置文件中 <property name="name" value="comprehensive"/>
    public void setUsername(String username) {
        this.username = username;
    }
}

衍生注解

为了更好的进行分层,Spring可以使用其它三个注解,功能一样,目前使用哪一个功能都一样。

  • @Controller:web层
  • @Service:service层
  • @Repository:dao层

写上这些注解,就相当于将这个类交给Spring管理装配了!

自动装配注解

在Bean的自动装配已经讲过了,可以回顾

作用域

@scope

  • singleton:默认的,Spring会采用单例模式创建这个对象。关闭工厂 ,所有的对象都会销毁。
  • prototype:多例模式。关闭工厂 ,所有的对象不会销毁。内部的垃圾回收机制会回收

    四、基于Java的容器配置

    具体的可以查看官方文档
    image.png
    image.png ```java package com.comprehensive.pojo;

public class Dog { public String name = “WangCai”; }

```java
package com.comprehensive.config;

import com.comprehensive.pojo.Dog;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration //代表这是一个配置类
public class AppConfig {
    @Bean //通过方法注册一个bean,这里的返回值就是Bean的类型,方法名就是bean的id
    public Dog getDog() {
        return new Dog();
    }
}
public class PojoTest {
    @Test
    public void test2() {
        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        Dog dog = context.getBean("getDog", Dog.class);
        System.out.println(dog.name);
    }
}