IDEA入门-Spring

138 阅读3分钟

使用注解的前提:

  • 先在pom.xml导入 Spring 开发的基本包坐标
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>5.0.5.RELEASE</version>
</dependency>
  • 创建Spring核心配置文件applicationContext.xml, 该配置文件对应的是Spring容器 image.png

  • 使用注解, 需要先在核心配置文件中添加包扫描配置

<?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
        ">
    <!--使用注解,需要在spring核心配置文件中,通过<context>标签添加包扫描,告诉系统识别注解-->
    <context:component-scan base-package="com.rcd"></context:component-scan>
</beans>

image.png

注解

  • 总结
0, 注解的参数: 可以按住Ctrl点击注解查看参数
1, dao层、service层、web层快速生成bean对象的注解:
@component()、@controller()、@service()、@repository()
2, service层引入dao层bean对象的注解:
@Autowire、@Qualifier()、@Resource(name="beanID")
  • @Component
使用在类上用于【实例化Bean】
可以在service、dao对应的类上使用该注解,xml中就不用配置了

不确定具体的层时,使用该注解,相当于下面三个注解:
@Controller
@Service
@Repository
这三个注解更加的语义化,可以在不同的业务层使用不同的注解。
  • @Controller
使用在web层类上用于实例化Bean
  • @Service("serviceID")
使用在service层类上用于实例化Bean
  • @Repository("daoID")
使用在dao层类上用于实例化Bean
  • @Autowired
使用在字段上,用于根据类型依赖注入
如果相同类型的数据超过1个,必须要和@Qualifier()配合使用,
如果相同类型的数据只有1个,可以不用写@Qualifier()
比如:该注解可以替换:一个serviceBeanA引用另一个id为user1的daoBean
<bean ref='user1'>
  • @Qualifier("beanID")
结合@Autowired一起使用, 用于根据id名称进行依赖注入
  • @Resource(name="beanID")
相当于@Autowired+@Qualifier,按照id名称进行依赖注入
  • @Value
注入普通属性, 通常用于dao层
  • @Scope
标注Bean的作用范围, 和生成bean的注解@component()、@controller()、@service()、@repository()等配合使用.
  • @PostConstruct
使用在方法上标注该方法是Bean 的初始 化方法
  • @PreDestroy
使用在方法上标注该方法是Bean 的销毁 方法
  • 注解演示Demo
@Service("userService") //生成userService的bean
//@Scope("prototype") //多例
@Scope("singleton")   //单例
public class UserServiceImpl implements UserService {

    @Value("${jdbc.driver}")
    private String driver;

    //<property name="userDao" ref="userDao"></property>
    //@Autowired //按照数据类型从Spring容器中进行匹配的
    //@Qualifier("userDao")  //是按照id值从容器中进行匹配的 但是主要此处@Qualifier结合@Autowired一起使用
    @Resource(name="userDao") //@Resource相当于@Qualifier+@Autowired
    private UserDao userDao;

    public void save() {
        System.out.println(driver);
        userDao.save();
    }

    //使用在方法上标注该方法是Bean的初始化方法
    @PostConstruct
    public void init(){
        System.out.println("Service对象的初始化方法");
    }
    //使用在方法上标注该方法是Bean的销毁方法
    @PreDestroy
    public void destory(){
        System.out.println("Service对象的销毁方法");
    }

}
  • spring新注解
  • @Configuration
用于指定当前类是一个Spring配置类,当创建容器时会从该类上加载注解
  • @ComponentScan("com.rcd")
指定spring在初始化容器时要扫描的包com.rcd下的所有目录
  • @Bean('beanID')
使用在方法上,标注将该方法的返回值存储到 Spring 容器中生成bean实例, 并将id设置为beanID
  • @PropertySource("xxx.properties")
用于加载xxx.properties 文件中的配置,使用EL表达式可以获取变量对应的值
  • @Import(Xxx.class)
用于导入其他配置类