Spring注解开发(1)


 

下面分别演示一下xml方式和注解方式看看区别


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

   <bean id="userService" class="com.service.impl.UserServiceImpl">
        <property name="userDao" ref="userDao"></property>
   </bean>
  1. 让spring帮我们创建对象的注解Component(需要创建那个放在那个的上面)
//  <bean id="userDao" class="com.dao.impl.UserDaoImpl"></bean>
    @Component("userDao")
    public class UserDaoImpl implements UserDao {
        @Override
        public void save() {
            System.out.println("save running...");
        }

  注解里面的字符串其实就是bean的id名

//<bean id="userService" class="com.service.impl.UserServiceImpl">
//  </bean>
@Component("userService")
public class UserServiceImpl implements UserService {
    private UserDao userDao;

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

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

}

2.当需要在UserService中注入对象时,需要用到两个注解
AutoWired 和 Qualifier
   你想注入谁,就再Qualifier中写入它的id

//<bean id="userService" class="com.service.impl.UserServiceImpl">
//  </bean>
@Component("userService")
public class UserServiceImpl implements UserService {
    private UserDao userDao;
    @Autowired
    @Qualifier("userDao")
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

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

}

3.注解写完了,但是运行会报错,因为没有在application中加入组件扫描

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

base-packge它会识别报下的所有bean和子包。

如果我们要注入普通属性,就要用到@Value注解

@Value("driver")
private String Driver;

但是呢我们看到这个看着高大上但是有什么用呢?
直接private String Driver="driver";它不香吗
 

其实它的作用是可以读取到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>

可以看到上面的value因为spring加载了properties的属性,所以value可以取到他们的值
 

所以可以这样写:

@Value("${jdbc.Driver}")
private String Driver;

下面看一下Scope spring创建bean的作用范围

@Scope("singleton") spring表示bean只存在一个实例
@Scope("prototype") spring表示bean存在多个实例

下面看一下bean初始化和销毁属性用注解怎么实现

以前:

   <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"   
   init-method="" destroy-method=""> 
   </bean>

现在:

    @PostConstruct()
    public void init(){
        System.out.println("初始化方法");
    }
    @PreDestroy
    public void destroy(){
        System.out.println("销毁方法");
    }
posted @ 2022-03-20 10:36  长情c  阅读(26)  评论(0)    收藏  举报