Spring注解开发

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

Spring原始注解主要替代<Bean>的配置

注解说明
@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需要进行扫描以便识别使用注解配置的类、字段和方法

 <!--配置组件扫描-->
 <context:component-scan base-package="com.it"/>

原始注解案例

//定义一个接口(UserDao)
public interface UserDao {
    public void save();
}

//实现类(UserDaolmpl)
//<bean id="userDao" class="com.it.dao.impl.UserDaolmpl"></bean>
//@Component("userDao")
@Repository("userDao")
public class UserDaolmpl implements UserDao {
    public void save() {
        System.out.println("save running");
    }
}

//实现类(UserServicelmpl)
//<bean id="userService" class="com.it.service.impl.UserServicelmpl">
//@Component("userService")
@Service("userService")
@Scope("prototype")
public class UserServicelmpl implements UserService {
    @Value("${jdbc.driver}")
    private String driver;

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

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

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

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

//测试类
 public static void main(String[] args) {
        ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService userService = app.getBean(UserService.class);
        userService.save();
        app.close();
    }
2.2 Spring新注解

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

  • 非自定义的Bean的配置:<bean>
  • 加载properties文件的配置:<context:property-placeholder>
  • 组件扫描的配置:<context:component-scan>
  • 引入其他文件:<import>

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

    用于指定 Spring 在初始化容器时要扫描的包。

    作用和在Spring 的xml 配置文件中的

    <context:component-scan base-package="com.itheima"/>-##

    @Bean使用在方法上,标注将该方法的返回值存储到Spring 容器
    @PropertySource用于加载.properties 文件中的配
    @Import用于导入其他配置

    新注解案例

  • //实现类
    //标志该类是Spring的核心配置类
    @Configuration
    //<context:component-scan base-package="com.it"/>
    @ComponentScan("com.it")
    //<import resource=""/>
    @Import(DataSourceConfiguration.class)
    public class SpringCofiguration {
    
    }
    
    //实现类
    //<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.passsword}")
        private String passsword;
    
        @Bean("dataSource") //Spring会将当前方法的返回值以指定名称存储到Spring容器中
        public ComboPooledDataSource getDataSource() throws Exception {
            ComboPooledDataSource dataSource = new ComboPooledDataSource();
            dataSource.setDriverClass(driver);
            dataSource.setJdbcUrl(url);
            dataSource.setUser(username);
            dataSource.setPassword(passsword);
            return dataSource;
        }
    
    //测试类
     public static void main(String[] args) {
            //ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
            ApplicationContext app = new AnnotationConfigApplicationContext(SpringCofiguration.class);
            UserService userService = app.getBean(UserService.class);
            userService.save();
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值