Spring—注解开发

本文详细介绍了Spring框架中的核心注解,如@Component、@Controller、@Service、@Repository等,以及如何通过注解替代XML配置,包括组件扫描、属性注入和自定义Bean配置。通过实例代码展示,帮助读者理解如何利用注解简化Spring应用开发。
摘要由CSDN通过智能技术生成

Spring原始注解

Spring是轻代码而重配置的框架,配置比较繁重,影响开发效率,所以注解开发是一种趋势,注解代替xml配置文 件可以简化配置,提高开发效率。

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

注意:
使用注解进行开发时,需要在applicationContext.xml中配置组件扫描,作用是指定哪个包及其子包下的Bean需要 进行扫描以便识别使用注解配置的类、字段和方法。

<?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"
       xmlns:p="http://www.springframework.org/schema/p"
       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
">
    <context:component-scan base-package="com"/>
<context:property-placeholder location="jdbc.properties"/>
</beans>

使用@Compont或@Repository标识UserDaoImpl需要Spring进行实例化。

@Service("service")
@Scope("singleton")
public class service {

    @Autowired
    @Qualifier("impl")
    Dao dao;

    @Value("12")
    int no;

    @Value("${jdbc.username}")
    String name;


    public service(Dao dao) {
        this.dao = dao;
    }

    public service() {
    }

    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        service i = (service) applicationContext.getBean("service");
        i.save();
    }

    public void save() {
        System.out.println(name);
        dao.save();
    }

    public void setDao(Dao dao) {
        this.dao = dao;
    }
}

@Repository("impl")
@Scope("singleton")
public class ImplDao implements Dao {
    public void save() {
        System.out.println("saving");
    }

    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        ImplDao i = (ImplDao) applicationContext.getBean("impl");
        i.save();
    }
}

Spring新注解

使用上面的注解还不能全部替代xml配置文件,还需要使用注解替代的配置如下:

  • 非自定义的Bean的配置

  • 加载properties文件的配置:context:property-placeholder

  • 组件扫描的配置:context:component-scan

  • 引入其他文件:

  • @Configuration 用于指定当前类是一个 Spring 配置类,当创建容器时会从该类上加载注解

  • @ComponentScan 用于指定 Spring 在初始化容器时要扫描的包。 作用和在 Spring 的 xml 配置文件中 的 <context:component-scan base-package=“com.itheima”/>一样

  • @Bean 使用在方法上,标注将该方法的返回值存储到 Spring 容器中

  • @PropertySource 用于加载.properties 文件中的配置

  • @Import 用于导入其他配置类

@Configuration
@ComponentScan("com")
@Import(DataSourceConfiguration.class)
public class SpringConfiguration {
    @Test
    public void test()
    {
        ApplicationContext applicationContext=new AnnotationConfigApplicationContext(SpringConfiguration.class);
        service service=(service) applicationContext.getBean("service");
        service.save();
        javax.sql.DataSource dataSource=(javax.sql.DataSource)applicationContext.getBean("datasource");
        try {
            System.out.println(dataSource.getConnection());
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

    }
}

@PropertySource("classpath:jdbc.properties")
public class DataSourceConfiguration {

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

    @Bean("datasource")
    public ComboPooledDataSource testC3P0() throws Exception {
        ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();

        comboPooledDataSource.setDriverClass(clazz);
        comboPooledDataSource.setJdbcUrl(url);
        comboPooledDataSource.setUser(user);
        comboPooledDataSource.setPassword(password);

        return comboPooledDataSource;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值