Spring03 第三--spring注解开发

2.Spring注解开发

2.1 Spring原始注解

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

 

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

注解说明

@Component 使用在类上用于实例化Bean,【分不清是dao还是service层的时候用】

@Controller使用在web层类上用于实例化Bean

@Service使用在service层类上用于实例化Bean

@Repository使用在dao层类上用于实例化Bean

@Autowired使用在字段上用于根据类型依赖注入

@Qualifier结合@Autowired一起使用用于根据名称进行依赖注入

@Resource相当于@Autowired+@Qualifier,按照名称进行注入

@Value注入普通属性

@Scope标注Bean的作用范围

@PostConstruct使用在方法上标注该方法是Bean的初始化方法init-method

@PreDestroy使用在方法上标注该方法是Bean的销毁方法-destory-method

2.1.1不用注解的配置文件applicationContext.xml文件

 

<?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">

 

    <!--加载外部的properties文件-->

    <context:property-placeholder location="classpath:jdbc.properties"/>

 

    <!--配置数据源-->

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">

        <property name="driverClass" value="${jdbc.driver}"></property>

        <property name="jdbcUrl" value="${jdbc.url}"></property>

        <property name="user" value="${jdbc.username}"></property>

        <property name="password" value="${jdbc.password}"></property>

    </bean>

 

    <!--配置Dao-->

    <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"></bean>

 

    <!--配置service-->

    <bean id="userService" class="com.itheima.service.impl.UserServiceImpl">

        <property name="userDao" ref="userDao"/>

    </bean>

</beans>

2.1.2使用原始注解的配置文件applicationContext.xml文件

 

<?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">

 

    <!--加载外部的properties文件-->

    <context:property-placeholder location="classpath:jdbc.properties"/>

 

    <!--配置数据源-->

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">

        <property name="driverClass" value="${jdbc.driver}"></property>

        <property name="jdbcUrl" value="${jdbc.url}"></property>

        <property name="user" value="${jdbc.username}"></property>

        <property name="password" value="${jdbc.password}"></property>

    </bean>

  <!--注解的组件扫描-->

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

 

</beans>

 

2.2 Spring注解开发

2.2.1 dao 、service的基本注解

第一步: 配置组件扫描

 

注意:使用注解进行开发时,需要在applicationContext.xml中配置组件扫描,作用是指定哪个包及其子包下的Bean需要进行扫描以便识别使用注解配置的类、字段和方法。<!--注解的组件扫描--><context:component-scan base-package="com.itheima"></context:componentscan>

第二步:在dao、service类实现上配置注解

 

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

//@Component("userDao")

@Repository("userDao")

public class UserDaoImpl implements UserDao {

@Override

public void save() {System.out.println("save running... ...");

}

}

说明:@Repository("userDao")注解作用等同于

<bean id=”userDao” class=”…UserDaoImpl”>

 

(二)、使用@Compont或@Service标识UserServiceImpl需要Spring进行实例化

使用@Autowired或者@Autowired+@Qulifier或者@Resource进行userDao的注入

 

//@Component("userService")

@Service("userService")

public class UserServiceImpl implements UserService {

/*@Autowired@Qualifier("userDao")*/

@Resource(name="userDao")

private UserDao userDao;

@Override

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

 

重点说明:

1、通过注解的方式在service注入dao时,setUserDao的方法不用写,通过反射为dao属性赋值。

通过在spring配置文件配置dao注入到service,setUserDao方法必须写。

2、只写@Autowired---根据数据类型从spring容器进行匹配

3、@Autowired@Qualifier("userDao")根据bean的id名称匹配

4、@Service("userService")等同于<bean id="userService" class="com.itheima.service.impl.UserServiceImpl">

5、@Resource(name="userDao")作用等同于

      <property name=”userDao” ref=”userDao”></property>

 

2.2.2  dao 、service的基本注解

(一)、使用@Value进行字符串的注入

@Repository("userDao")

public class UserDaoImpl implements UserDao {

@Value("注入普通数据")

private String str;

@Value("${jdbc.driver}")

private String driver;

}

说明:

配置

<context:property-placeholder location="classpath:jdbc.properties"/>

通过在applicationContext.xml 加载项目resource下的jdbc.properties,把jdbc的键值对加载到spring容器。可以通过注解@Value("${key }") 获取到对应的值

 

 

(二)使用@Scope标注Bean的范围//@Scope("prototype")@Scope("singleton")public class UserDaoImpl implements UserDao {//此处省略代码}

(三)

使用@PostConstruct标注初始化方法,使用@PreDestroy标注销毁方法

@PostConstruct 等同于在配置文件中的init-method

public void init(){System.out.println("初始化方法....");}

@PreDestroy等同于在配置文件中的destrory-method

public void destroy(){System.out.println("销毁方法.....");}

 

3   Spring新注解

3.3.1 新注解说明

 

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

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

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

@PropertySource用于加载.properties 文件中的配置@Import用于导入其他配置类

 

3.3.2用新注解 取代applicationContext.xml

(一)spring总的配置类

//标志该类是spring的核心配置类

@Configuration

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

@ComponentScan("com.itheima")

//加载DataSourceConfiguration数据源类

@Import({DataSourceConfiguration.class})

public class SpringConfiguration {}

 

( 二) DataSourceConfiguration数据源类

@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(name="dataSource")

public DataSource getDataSource() throws PropertyVetoException {

ComboPooledDataSource dataSource = new ComboPooledDataSource();

dataSource.setDriverClass(driver);

dataSource.setJdbcUrl(url);

dataSource.setUser(username);

dataSource.setPassword(password);

return dataSource;

}}

( 三)测试加载核心配置类创建Spring容器

@Test

public void testAnnoConfiguration() throws Exception {

ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfiguration.class);

UserService userService = (UserService) applicationContext.getBean("userService");

userService.save();

DataSource dataSource = (DataSource) applicationContext.getBean("dataSource");

Connection connection = dataSource.getConnection();

}

 

posted @ 2021-12-27 16:02  烁妈妈  阅读(35)  评论(0)    收藏  举报