spring的注解开发

为什么要有注解:

spring轻代码重配置,就导致了配置繁重,影响开发的效率,注解开发代替xml的配置文件,可以简化配置。

spring的原始注解:

spring原始注解主要是代替 < Bean>标签的配置。

spring的注解开发_第1张图片

 使用上面的注解来进行实现一个简单的基于注解的开发:
dao层代码:


@Repository("userDao")
public class UserDaoImpl implements UserDao {
    @Override
    public void save() {
        System.out.println("测试成功");
    }

service层代码:


@Service("userservice")
public class UserServiceImpl  implements UserService {
//    @Autowired
//    @Qualifier("userDao")
     @Resource
    private UserDao  userDao;

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

使用注解的方式进行依赖注入则不需要进行使用get方法,就可以实现依赖注入。

@Autowired  表示会按照 数据类型从spring容器中进行匹配,然后进行注入

【如果现在sprin容器中具有多个相同数据类型的bean那么这样就会出现错误,】

@Qualiffier是按照id的值从容器中进行匹配的但是此处要结合@Atowinertia注解一起使用

@Resource(name=””),如果加上name属性的话  会按照id的值进行寻找bean,如果不加的话是按照数据类型进行找bean

配置文件中的代码:

需要在配置问价中进行配置,从而继续组件扫描,但是组件扫描依赖于context空间

测试:

Test
 public void sds(){
    ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("a.xml");
    UserService userservice = classPathXmlApplicationContext.getBean(UserService.class);

    userservice.save();

 }

使用注解注入普通的数据类型【@Value注解】:
spring的注解开发_第2张图片

 同时也是使用${****}表达式来进行注入

@Scope注解

spring的注解开发_第3张图片

Bean对象生命周期注解:
spring的注解开发_第4张图片 

spring的新注解

使用上述的注解并不能完全的替换spring配置文件中的配置,那么使用新注解就可以大幅度的简化开发了。主要是用来实现替换spring的配置文件

 spring的注解开发_第5张图片

 

代码示例:
【使用注解的方式来代替spring的xml配置文件】

@Configuration
@ComponentScan("com.itheima.zhujie")//是用于配置组件扫描的
@PropertySource("classpath:jdbc.properties")//用于加载配置信息文件
public class SpringConfigurtion {
        @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 DataSource  shd(){
           DruidDataSource druidDataSource = new DruidDataSource();//获取Driver数据源
           druidDataSource.setDriverClassName(driver);//获取数据源驱动
           druidDataSource.setUrl(url);//获取数据库的地址
           druidDataSource.setUsername(password);//数据库用户名
           druidDataSource.setPassword(username);//数据库密码
           return  druidDataSource;
       }

//       @Bean
//       public  JdbcTemplate jdbcTemplate(){
//           return new JdbcTemplate();
//       }

}

spring的注解开发_第6张图片

测试:

 @Test
    public void  test1(){


          AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(SpringConfigurtion.class);
           DataSource dataSource = (DataSource) annotationConfigApplicationContext.getBean("dataSource");
          JdbcTemplate jdbcTemplate = new JdbcTemplate();
          //dbcTemplate.setDataSource(dataSource);
          int i = jdbcTemplate.update("insert into account values(?,?,?)", 15,"root4", 1024);
          System.out.println(i);


   }

使用配置类和配置文件在加载配置文件信息的代码不相同 :

       xml配置文件使用new ClassPathXmlApplicationContext(“”);

       配置类使用: new AnnotationConfigApplicationContext(SpringConfigurtion.class);

spring集成juint 

之前使用spring配置文件中的配置的Bean需要书写很多的代码:如加载配置文件等

使用junit负责创建spring容器,但是需要将配置文件或者主配置类告诉它,将需要测试的bean直接在测试类中进行注入,然后进行测试。

spring集成junit的步骤:

  • 导入spring集成的junit坐标。
  • 使用@RunWith注解替换原有的运行器
  • 使用@ContextConfiguration注解指定配置问价或者是配置类
  • 使用依赖注入,注入需要测试的对象
  • 创建测试方法进行测试

配置类的代码:

@Configuration //表示该类是spring的核心配置类
@ComponentScan("com.itheima.zhujie")//是用于配置组件扫描的
@PropertySource("classpath:jdbc.properties")//用于加载配置信息文件
public class SpringConfigurtion {

        @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 DataSource  shd(){
           DruidDataSource druidDataSource = new DruidDataSource();//获取Driver数据源
           druidDataSource.setDriverClassName(driver);//获取数据源驱动
           druidDataSource.setUrl(url);//获取数据库的地址
           druidDataSource.setUsername(password);//数据库用户名
           druidDataSource.setPassword(username);//数据库密码
           return  druidDataSource;
       }

dao层代码:
 

Repository("userDao")
public class UserDaoImpl implements UserDao {
    @Override
    public void save() {
        System.out.println("测试成功");
    }

service的代码:

ervice("userservice")
public class UserServiceImpl  implements UserService {
   // @Autowired
//    @Qualifier("userDao")
     @Resource
    private UserDao  userDao;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

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

测试类的代码:
 

/**
 *
 AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(SpringConfigurtion.class);
 DataSource dataSource = (DataSource) annotationConfigApplicationContext.getBean(DataSource.class);
 Connection connection = dataSource.getConnection();
 *  下面的代码主要就是用来简化上面的代码
 *
 * ***/
//使用全注解的方式进行加载
@RunWith(SpringJUnit4ClassRunner.class)//让spring来进行执行测试
//@ContextConfiguration("classpath:a.xml")
@ContextConfiguration(classes = SpringConfigurtion.class)
public class SpringJunitTest {
     @Autowired
      private UserServiceImpl userService;
     @Test
     public void sds(){

         userService.save();
     }

你可能感兴趣的:(spring)