一、前期准备
- 在spring4之后,想要使用注解形式,必须得要引入aop的包
- 在配置文件当中,还得要引入一个context约束
二、Bean的实现
配置扫描哪些包下的注解
<?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">
<context:component-scan base-package="com.comprehensive.pojo"/>
<context:annotation-config/>
</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 //相当于配置文件中
- 如果提供了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层
自动装配注解
作用域
@scope
- singleton:默认的,Spring会采用单例模式创建这个对象。关闭工厂 ,所有的对象都会销毁。
- prototype:多例模式。关闭工厂 ,所有的对象不会销毁。内部的垃圾回收机制会回收
四、基于Java的容器配置
具体的可以查看官方文档
```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);
}
}