Spring全解-05-使用注解开发
注解开发
说明
在Spring4之后,想要使用注解进行开发,必须要引入aop的包,你在pom中导入spring-webmvc包后,它会自动下载依赖。
Bean的实现
之前都是使用bean的标签进行bean依赖注入,但是在实际开发中,一般是使用注解。
使用步骤
配置文件当中,引入一个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>
配置扫描哪些包下的注解
<!--指定注解扫描包--> <context:component-scan base-package="com.li.pojo"/>
在指定包下编写类,增加注解
@Component("user") // 相当于配置文件中 <bean id="user" class="当前注解的类"/> public class User { public String name = "李扶摇"; }
测试
@Test public void test(){ ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml"); User user = (User) applicationContext.getBean("user"); System.out.println(user.name); }
属性注入
可以不用提供set方法,直接在直接名上添加@value("值")
@Component("user") // 相当于配置文件中 <bean id="user" class="当前注解的类"/> public class User { @Value("李扶摇") // 相当于配置文件中 <property name="name" value="李扶摇"/> public String name; }
衍生注解
@Component三个衍生注解
为了更好的进行分层,Spring可以使用其它三个注解,功能一样,目前使用哪一个功能都一样。
-
@Controller:web层
-
@Service:service层
-
@Repository:dao层
写上这些注解,就相当于将这个类交给Spring管理装配了!
自动装配注解
上一篇讲过
作用域
@Controller("user") @Scope("prototype") public class User { @Value("李扶摇") public String name; }
小结
xml配置与注解配置的比较
xml可以适用任何场景,结构清晰,维护比较方便。
注解开发比较简单。
最佳实践:xml和注解整合开发
xml管理Bean。
注解完成属性注入。
适用过程中可以不用扫描,扫描是为了类上的注解。
<context:annotation-config/>
作用
进行注解驱动注册,从而使驱动生效。
用于激活那些已经在spring容器里注册过测bean上面的注解,也就是显式的向spring注册。
如果不扫描包,就需要手动配置bean。
如果不加注解驱动,则注入的值为null。
基于java类进行配置 @Configuration //代表这是一个配置类
JavaConfig原来是Spring的一个子项目,它通过Java类的方式提供Bean的定义信息,在Spring4的版本,JavaConfig已经正式成为Spring的核心功能。
测试
@Component //将这个类标注为Spring的一个组件,放到容器中! public class Dog { public String name = "dog"; }
新建一个config配置包,编写一个MyConfig配置类
@Configuration //代表这是一个配置类 public class MyConfig { @Bean //通过方法注册一个bean,这里的返回值就Bean的类型,方法名就是bean的id! public Dog dog(){ return new Dog(); } }
@Test public void test2(){ ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MyConfig.class); Dog dog = (Dog) applicationContext.getBean("dog"); System.out.println(dog.name); }