Spring 基于注解的IoC
程序员文章站
2022-07-10 17:27:23
基于注解的IoC@Component@Component("类名")@Component(value="类名")组件,是类级别的注解,只能放在类的定义上面。Spring提供的IOC的基础注解。不写参数时代表:id=类名首字母小写作用:替换标签,其中value值代替id或name,class属性是通过注解所在的类名获取到的。衍生注解语义化的衍生注解,在Spring MVC中使用。@Repository一般用于定义dao层的bean。@Service一般用于定...
基于注解的IoC
@Component
@Component("类名")
@Component(value="类名")
组件,是类级别的注解,只能放在类的定义上面。Spring提供的IOC的基础注解。
不写参数时代表:id=类名首字母小写
作用:
替换<bean>
标签,其中value值代替id
或name
,class
属性是通过注解所在的类名获取到的。
衍生注解
语义化的衍生注解,在Spring MVC中使用。
@Repository
一般用于定义dao层的bean。
@Service
一般用于定义service(业务)层的bean。
@Controller
一般用于定义控制层的注解
@PostConstruct
方法级别的注解,构造方法执行后执行的方法,初始化方法。
@preDestory
方法级别的注解,容器销毁前执行。
使用注解
①开启组件扫描
并增加aop的依赖(aop的依赖包)。
需要在xml中加入context约束,然后在xml开启组件扫描。
<!-- base-package用于定义需要扫描的包 -->
<context:component-scan base-package="com">
</context:component-scan>
②在要生成实例的类(控制反转)上面写入注解
@Component("userDao")
public class UserDaoImpl{
方法一;
方法二;
}
③测试类
public class Main {
public static void main(String[] args) {
ApplicationContext context=
new ClassPathXmlApplicationContext("applicationContext2.xml");
UserDaoImpl user=(UserDaoImpl) context.getBean("userDao");
user.方法一;
}
}
生命周期
①定义初始化方法注解
@PostConstruct
在构造方法后执行(init方法)
②定义销毁方法注解
@PreDestory
在容器销毁前执行(destory方法)
当工厂对象销毁时调用。
ClassPathXmlApplicationContext context=
new ClassPathXmlApplicationContext("applicationContext2.xml");
UserDaoImpl user=(UserDaoImpl) context.getBean("userDao");
context.close();
实例
使用反射。
public static List<?> query(String sql,Class clazz){
Connection con;
PreparedStatement ps;
ResultSet rs;
List res=new ArrayList();
try {
con=JdbcUtil.getConnection();
ps=con.prepareStatement(sql);
rs=ps.executeQuery();
ResultSetMetaData rsmd=rs.getMetaData();
int count=rsmd.getColumnCount();
while(rs.next()) {
Object obj=clazz.newInstance();
for(int i=0;i<count;i++) {
String columnName=rsmd.getColumnLabel(i+1);
Object o=rs.getObject(i+1);
Field field=clazz.getDeclaredField(columnName);
field.setAccessible(true);
field.set(obj, o);
}
res.add(obj);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return res;
}
本文地址:https://blog.csdn.net/Stand_Fast/article/details/110236539