学习目标:
Spring的注解开发及Java配置类的使用
学习内容:
1、Spring使用注解开发
2、使用Java的方式配置Spring
学习时间:
学习产出:
一、Spring使用注解开发
Spring4之后必须要导入spring-aop的包
1、Bean
指定要扫描的包:
<!--指定要扫描的包,这个包下的注解就会生效-->
<context:component-scan base-package="com.study.pojo"/>
<context:annotation-config/>
@Component:组件,放在类上说明这个类被Spring管理了,就是bean
//Component(组件) 等价于 <bean id="user" class="com.study.pojo.User"/>
@Component
public class User {
//@Value相当于<property name="name" value="张三"/>
@Value("张三")
public String name;
}
2、衍生注解
@Component的衍生注解,在web开发中,会按照mvc三层架构分层
- dao: 【@Repository】
- service: 【@Service】
- controller: 【@Controller】
- @Scope(“singleton”)设置为单例,@Scope(“prototype”)设置为原型
3、XML与注解
- XML与注解
- xml更加万能,适用于任何场合,维护简单
- 注解不是自己的类无法使用,维护相对复杂
- XML与注解最佳实践
- xml用来管理bean (<bean id=“xx” class=“xxx”)
- 注解负责属性注入 (value=“xxx”)
注意Spring版本和JDK版本要对应
使用Java的方式配置Spring
完全不使用Spring的xml配置,全部交给Java来做(JavaConfig)
配置类(@Configuration)
package com.study.config;
import org.springframework.context.annotation.Configuration;
/**
* @ClassName MyConfig
* @Author $童一
* @Description $
* @Param $
* @return $
* @Date $ $
**/
@Configuration//设置为配置类,Configuration也会被Spring容器托管,注册到容器中,因为它本来就是一个@Component
public class MyConfig {
//注册Bean,跟xml中的bean一样
//这个方法的名字相当xml中bean的id,返回值相当于bean的class
@Bean
public User getUser(){
return new User();//返回要注入到bean的对象
}
}
POJO
package com.study.pojo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* @ClassName User
* @Author $童一
* @Description $
* @Param $
* @return $
* @Date $ $
**/
@Component//组件
public class User {
@Value("张三")//值
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
'}';
}
}
Test
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
* @ClassName MyTest
* @Author $童一
* @Description $
* @Param $
* @return $
* @Date $ $
**/
public class MyTest {
@Test
public void Test(){
//使用AnnotationConfigApplicationContext注解获取配置,不再是用ClassPathXmlApplicationContext
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);
User user = (User) context.getBean("getUser");
System.out.println(user.getName());
}
}