说明

注解在spring就是一个类,使用@+注解名称
在开发中,可以使用注解取代xml配置。更高效快捷。
如果使注解生效要在xml中配置命名空间的声明和扫描信息。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
<xmlns:context="http://www.springframework.org/schema/context"
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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">

<context:component-scan base-package="要扫描的包名"></context:component-scan>
</beans>

@Component取代xml中的IOC配置(bean)

还是举个例子比较实在。
一个user类。在类名上添加@Component注解

package com.scx.annot;

import org.springframework.stereotype.Component;

@Component("UsersId")
public class Users
private String username;
private Integer age;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Users [username=" + username + ", age=" + age + "]";
}

}

xml配置 context:component-scan标签,

<context:component-scan base-package="com.scx.annot"></context:component-scan>

扫描当前包。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">

<context:component-scan base-package="com.scx.annot"></context:component-scan>
</beans>

测试代码:
在这里我们为user实例赋初值。

.setUsername("唐嫣");
user.setAge(10);
@org.junit.Test
public void test1() {
String xmlPath = "com/scx/annot/applicationContext.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
xmlPath);
Users user = applicationContext.getBean("UsersId", Users.class);
user.setUsername("唐嫣");
user.setAge(10);
System.out.println(user);

运行结果:

Spring(七)基于注解装配bean_spring


成功运行出了结果。使用@Component注解实现了和在xml配置bean同样的功能。

@Value取代xml中的字段普通值

我们可以在字段名上添加@value(“普通值”)来取代在xml中

id="" class="">
<property name="" value=""></property>
</bean>

例子:
Users类和上面的一样只不过在字段名上加@Value注解

@Value("唐嫣")
private String username;
@Value("10")
private

测试代码

public void test1() {
String xmlPath = "com/scx/annot/applicationContext.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
xmlPath);
Users user = applicationContext.getBean("UsersId", Users.class);
System.out.println(user);
}

运行结果

Spring(七)基于注解装配bean_spring

@Autowired取代xml中的字段引用值

使用注解取代字段中的引用值共有三种方式

​ 方式1:按照【类型】注入 @Autowired 自动注入 方式2:按照【名称】注入1 @Autowired @Qualifier("名称") 根据名称注入 方式3:按照【名称】注入2 @Resource("名称") 根据名称注入 ​

只用方式2举例子了
新建了一个Address类

package com.scx.annot;

import org.springframework.stereotype.Component;

@Component("AddressId")
public class Address
private String phone="110";
private String city="杭州";

public String getPhone() {
return phone;
}

public void setPhone(String phone) {
this.phone = phone;
}

public String getCity() {
return city;
}

public void setCity(String city) {
this.city = city;
}

@Override
public String toString() {
return "Address [phone=" + phone + ", city=" + city + "]";
}

}

在Users类中添加address字段

package com.scx.annot;

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

@Component("UsersId")
public class Users
@Value("唐嫣")
private String username;
@Value("10")
private Integer age;
@Autowired
@Qualifier("AddressId")
private Address address;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
@Override
public String toString() {
return "Users [username=" + username + ", age=" + age + ", address="
+ address + "]";
}

}

测试代码不变 输入结果

Spring(七)基于注解装配bean_spring_03

web注解方式

web开发,提供3个@Component注解衍生注解(功能一样)
@Repository :dao层
@Service:service层
@Controller:web层
这三个注解和@Component一样,在web开发中使用这三个注解是代码更加清晰明了。
下面举个例子
aciton层->service层->dao层

目标例子创建过程

StudentsService接口和其实现类StudentsServiceImpl
StudentsAction,表示web层的action
StudentsDao,表示dao层

代码:
action层 ,里面有一个引用字段studentsService,使用第一种方式注入,和一个方法。调用service层中的doService方法,

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;

@Controller("StudentsActionId")
public class StudentsAction {
@Autowired
StudentsService studentsService;
public void execute(){
studentsService.doService();

StudentsService 接口只有一个方法doService

public interface StudentsService {
public void doService();
}

service层:
StudentsService 实现类,一个引用字段stDao ,使用第二种方式注入

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

@Service("StudentsServiceImplId")
public class StudentsServiceImpl implements StudentsService{

@Autowired
@Qualifier("StudentsDaoId")
private StudentsDao stDao;
@Override
public void doService() {
stDao.doDao();
}

}

dao层,只有一个方法 doDao

import org.springframework.stereotype.Repository;

@Repository("StudentsDaoId")
public class StudentsDao {
public void doDao(){
System.out.println("StudentsDao");
}
}

xml配置不变。
测试代码:
执行action的execute方法

@org.junit.Test
public void test() {
String xmlPath = "com/scx/annot/applicationContext.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
xmlPath);
StudentsAction user = applicationContext.getBean("StudentsActionId", StudentsAction.class);
user.execute();
}

Spring(七)基于注解装配bean_spring_04

@Scope取代xml中bean的作用域配置

在类名上面添加注解

@Scope(“prototype”) 表示多例

@Scope(“singleton”) 表示单例

很简单 就不再测试了。

Spring(七)基于注解装配bean_字段_05

生命周期@PostConstruct和@PreDestroy

在方法上添加注解即可。
初始化:@PostConstruct
销毁:@PreDestroy
@PostConstruct表示在生成bean之前调用
@PreDestroy表示销毁bean调用