目录
一、什么是Bean管理
二、Bean管理操作的两种方式
三、基于注解的方式实现Bean管理和注入属性
1.什么是注解
2.Spring针对Bean管理中创建对象提供的注解
3.用注解的方式创建对象
4.用注解的方实现属性注入
5. IOC纯注解的方式
bean管理指的是如下的两个操作。
1.创建对象 2.注入属性
1.基于xml配置文件的方式实现 2.基于注解方式实现
本篇我们讲解以注解方式来实现
①:注解是代码特殊标记,格式:@注解名称(属性名称=属性值,属性名称=属性值...)
②:使用注解,注解作用在类上面,方法上面,属性上边
③:使用注解的目的:简化XML配置
@Component 普通的类
@Controller 表现层
@Service 业务层
@Repository 持久层
编写接口和实现类
package com.qcby.testanno;
public interface UserService {
public void hello();
}
在需要管理的类上添加@Component注解
package com.qcby.testanno;
import org.springframework.stereotype.Controller;
/* */
/**
* 组件,作用:把当前类使用IOC容器进行管理,如果没有指定名称,默认使用类名,首字母是小写。
* userServiceImpl。或者自己指定名称
**/
//@Controller(value = "us")这样的话我们getbean就得根据这个了。
@Controller
public class UserServiceImpl implements UserService {
@Override
public void hello() {
System.out.println("使用注解,方便吧!");
}
}
编写配置文件,重点是开启注解扫描。
编写测试方法
package com.qcby.Test;
import com.qcby.testanno.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class DemoTest2 {
@Test
public void run1(){
ApplicationContext ac=new ClassPathXmlApplicationContext("ApplicationContext.xml");
UserService us = (UserService) ac.getBean("userServiceImpl");
us.hello();
}
}
@Value 用于注入普通类型(String,int,double等类型)
@Autowired 默认按类型进行自动装配(引用类型)
优先bytype后byname
一般来说使用前两个就够了
@Qualifier 不能单独使用必须和@Autowired一起使用,强制使用名称注入
@Resource Java提供的注解,也被支持。使用name属性,按名称注入
package com.qcby.testanno;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component(value = "car")
public class Car {
// 注解注入值,属性set方法是可以省略不写的。
// 只有一个属性,属性的名称是value,value是可以省略不写的
@Value("宝马")
private String carname;
@Value(value = "160")
private Double money;
// 也不用提供set方法
// 按类型自动装配的注解,和id名称没有关系
@Autowired
// 按id的名称注入,Qualifier不能单独使用,需要Autowired一起使用。
// @Qualifier(value = "person")
// @Resource Java提供的注解,按名称注入对象,属性名称是name
//@Resource(name = "person")
private Person person;
@Override
public String toString() {
return "Car{" +
"carname='" + carname + '\'' +
", money=" + money +
", person=" + person +
'}';
}
}
package com.qcby.testanno;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
@Controller
//@Component(value = "person")
public class Person {
@Value("张三")
private String personname;
@Override
public String toString() {
return "Person{" +
"pname='" + personname + '\'' +
'}';
}
}
@Test
public void run2(){
// 工厂
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
// 获取对象
Car car = (Car) ac.getBean("car");
System.out.println(car.toString());
}
纯注解的方式是微服务架构开发的主要方式,所以也是非常的重要。纯注解的目的是替换掉所有的配置文件。但是需要编写配置类。
常用的注解总结
@Configuration 声明是配置类
@ComponentScan 扫描具体包结构的
编写实体类
package com.qcby.PureAnnotation;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class City {
@Value("北京")
private String address;
@Override
public String toString() {
return "City{" +
"address='" + address + '\'' +
'}';
}
}
编写配置类,替换掉applicationContext.xml配置文件
package com.qcby.PureAnnotation;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.annotation.ComponentScan;
@Configurable
@ComponentScan(value = "com.qcby")
public class SpringConfig {
}
package com.qcby.Test;
import com.qcby.PureAnnotation.City;
import com.qcby.PureAnnotation.SpringConfig;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class DemoTest3 {
@Test
public void run(){
ApplicationContext ac=new AnnotationConfigApplicationContext(SpringConfig.class);
City city = (City) ac.getBean("city");
System.out.println(city.toString());
}
}
Spring框架Bean管理-xml_何妨徐行的博客-CSDN博客