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>
- 让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("销毁方法");
}