Spring的重要注解示例(原始注解+新注解)

一、原始注解

Spring原始注解主要是替代<bean>的配置,前9个是常用的注解

注解

说明

@Component                使用在类上用于实例化Bean
@Controller使用在web层类上用于实例化Bean
@Service使用在service层类上用于实例化Bean
@Repository使用在dao层类上用于实例化Bean
@Autowired使用在字段上用于根据类型依赖注入
@Qualifier结合@Autowired一起使用根据名称进行依赖注入
@Resource相当于@Autowired+@Qualifier按照名称进行注入
@Value注入普通属性
@Scope标注Bean的作用范围
@PostConstruct使用在方法上标注该方法是Bean的初始化方法
@PreDestroy使用在方法上标注该方法是Bean的销毁方法

1、@Component:web层、dao层、service层等都可以用,这里以dao层举例,将名为“userDao”的Bean注入到spring容器中

//作用相当于在applicationContext.xml中配置<bean id="userDao" class="com.org.dao.impl.UserDaoImpl">
@Component("userDao")    
public class UserDaoImpl implements UserDao {
    public void save() {
        System.out.println("save running...");
    }
}

2、@Controller

//和@Component作用一样,但分类更具体
//实例化web层的Bean,这里不用指定名称
@Controller
public class UserController {
    public String save(){
        System.out.println("Controller save running...");
        return "success.jsp";        
    }
}

3、@Service:将名为“userService”的Bean注入到spring容器中

//和@Component作用一样,但分类更具体
@Service("userService")     
public class UserServiceImpl implements UserService {
    public void save() {
        System.out.println("success");
    }
}

4、@Repository:将名为“userDao”的Bean注入到spring容器中

//和@Component作用一样,但分类更具体
@Repository("userDao")     
public class UserDaoImpl implements UserDao {
    public void save() {
        System.out.println("save running...");
    }
}

5、@Autowired:往userService中注入userDao这个Bean

@Service("userService")     
public class UserServiceImpl implements UserService {
    //相当于在applicationContext.xml中配置<property name="userDao" ref="userDao"></property>
    @Autowired    //按照数据类型从spring容器中进行匹配,当有多个userDao的bean时无法匹配到具体的,可以单独使用
    private UserDao userDao;

    public void save() {
        userDao.save();
    }
}

6、@Qualifier:和@Autowired搭配使用,往userService中注入userDao这个Bean

@Service("userService")     
public class UserServiceImpl implements UserService {
    //相当于在applicationContext.xml中配置<property name="userDao" ref="userDao"></property>
    @Autowired  
    @Qualifier("userDao")   //按照id值从容器中进行精确匹配,但是需要与Autowired一起使用
    private UserDao userDao;

    public void save() {
        userDao.save();
    }
}

 7、@Resource:相当于@Autowired+@Qualifier的作用,写法更简单方便

@Service("userService")     
public class UserServiceImpl implements UserService {
    //相当于在applicationContext.xml中配置<property name="userDao" ref="userDao"></property>
    @Resource(name = "userDao")     //相当于@Autowired+@Qualifier
    private UserDao userDao;

    public void save() {
        userDao.save();
    }
}

8、@Value:可以完成普通数据类型的注入

@Service("userService")    
public class UserServiceImpl implements UserService {

    @Value("com.mysql.cj.jdbc.Driver")    //普通数据类型的注入
    private String driver;

    public void save() {
        System.out.println(driver);    //输出为com.mysql.cj.jdbc.Driver
    }
}

9、@Scope:若指定为singleton,容器中的Bean对象只有一个,不管new出多少个Bean,都是同一个;若指定为prototype,容器中的Bean对象可以有多个,每次new出来的都是不同的

@Service("userService")  
@Scope("singleton")     //or @Scope("prototype")  标注bean的作用范围,singleton表示单例(默认的),prototype表示多例  
public class UserServiceImpl implements UserService {

    @Value("com.mysql.cj.jdbc.Driver")    //普通数据类型的注入
    private String driver;

    public void save() {
        System.out.println(driver);    //输出为com.mysql.cj.jdbc.Driver
    }
}

10、@PostConstruct、@PreDestroy:对象的初始化方法和销毁方法注解

@PostConstruct  //初始化方法注解
   public void init(){
      System.out.println("Service对象的初始化方法");
}

@PreDestroy     //销毁方法注解
   public void destory(){
       System.out.println("Service对象的销毁方法");
}

二、新注解

Spring新注解主要是将applicationContext.xml里的一些配置简化为注解形式

注解

说明

@Configuration用于指定当前类是一个Spring配置类,当创建容器时会从该类上加载注解
@ComponentScan用于指定Spring在初始化容器时要扫描的包
@Bean使用在方法上,标注将该方法的返回值存储到Spring容器中
@PropertySource用于加载properties文件中的配置
@Import用于导入其他配置类

1、@Configuration:标志该类是Spring的核心配置类

//标志该类是Spring的核心配置类
@Configuration
public class SpringConfiguration {
    
}

2、@ComponentScan:指定要扫描的包

@Configuration
@ComponentScan("com.org")    //组件扫描 相当于在xml中配置<context:component-scan base-package="com.org"/>
public class SpringConfiguration {

}

3、@PropertySource:

//加载properties文件  
//相当于在xml中配置<context:property-placeholder location="classpath:jdbc.properties"/>
@PropertySource("classpath:jdbc.properties")
public class DataSourceConfiguration {

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

 jdbc.properties文件配置如下:

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring-test?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
jdbc.username=root
jdbc.password=

4、@Bean:被标注方法的返回值将以指定的名称存储到Spring容器中

//加载properties文件  
//相当于在xml中配置<context:property-placeholder location="classpath:jdbc.properties"/>
@PropertySource("classpath:jdbc.properties")
public class DataSourceConfiguration {

    @Value("${jdbc.driver}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;
    
    @Bean("dataSource")     //Spring会将当前方法的返回值以指定名称存储到Spring容器中
    public ComboPooledDataSource getDataSource() throws PropertyVetoException {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass(driver);
        dataSource.setJdbcUrl(url);
        dataSource.setUser(username);
        dataSource.setPassword(password);
        return dataSource;
    }
    
}

5、@Import:以下代码表示在SpringConfiguration核心配置类中导入DataSourceConfiguration这个配置类

//标志该类是Spring的核心配置类
@Configuration
//import分模块配置文件  相当于在xml中配置<import resource=""/>
@Import({DataSourceConfiguration.class})    //{}里是个数组,如果需要导入多个配置文件,写法为{xx.class,xx.class}
public class SpringConfiguration {
    
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值