桐城市建设局网站,wordpress 百度收录,海口自助建站软件,临沂沂河新区注解开发#xff1a;
什么是驱动注解#xff1f; 注解启动时使用注解的形式替代xml配置#xff0c;将繁杂的spring配置文件从工程中彻底消除掉#xff0c;简化书写 注解驱动的弊端 为了达成注解驱动的目的#xff0c;可能会将原先很简单的书写#xff0c;变的更加复杂XM…注解开发
什么是驱动注解 注解启动时使用注解的形式替代xml配置将繁杂的spring配置文件从工程中彻底消除掉简化书写 注解驱动的弊端 为了达成注解驱动的目的可能会将原先很简单的书写变的更加复杂XML中配置第三方开发的资源是很方便的但使用注解驱动无法在第三方开发的资源中进行编辑因此会增大开发工作量但是第三方资源开发中编辑的毕竟比较少所以注解的优势依旧大于配置 启动注解功能
启动注解扫描加载类中配置的注解项
context:component-scan base-package包名/说明 在进行包所扫描时会对配置的包及其子包中所有文件进行扫描扫描过程是以文件夹递归迭代的形式进行的扫描过程仅读取合法的java文件扫描时仅读取spring可识别的注解扫描结束后会将可识别的有效注解转化为spring对应的资源加入IoC容器 注意 无论是注解格式还是XML配置格式最终都是将资源加载到IoC容器中差别仅仅是数据读取方式不同从加载效率上来说注解优于XML配置文件注解找到这个类以后直接可以加载配置文件是先找类然后加载 bean的定义
名称Component Controller Service Repository 类型类注解 位置类定义上方 作用设置该类为spring管理的bean 范例
Component(userService)
public class UserServiceImpl implements UserService {}说明 Controller表现层、Service 业务层、Repositorydao是Component的衍生注解功能同Component对应三层架构写哪个都是一样的 相关属性 value默认会加上value定义时不需要写只要写bean的访问id即可 bean的作用域 名称Scope 类型类注解 位置类定义上方 作用设置该类作为bean对应的scope属性 范例
Scope
Component(userService)
public class UserServiceImpl implements UserService {}相关属性 value默认定义bean的作用域默认为singleton bean的生命周期 名称PostConstruct、PreDestroy 类型方法注解 位置方法定义上方 作用设置该类作为bean对应的生命周期方法 范例 PostConstructpublic void init() {System.out.println(user service init...);}PreDestroypublic void destroy() {System.out.println(user service destroy...);}加载第三方资源 名称Bean 类型方法注解 位置方法定义上方 作用设置该方法的返回值作为spring管理的bean 范例
Component
public class JDBCConfig {Bean(dataSource)public static DruidDataSource getDataSource() {DruidDataSource ds new DruidDataSource();ds.setDriverClassName(com.mysql.jdbc.Druid);ds.setUrl(jdbc:mysql://localhost:3306/db2);ds.setUsername(你的用户名);ds.setPassword(你的密码);return ds;}
}说明 因为第三方bean无法在其源码上进行修改使用Bean解决第三方bean的引入问题 该注解用于替代XML配置中的静态工厂与实例工厂创建bean不区分方法是否为静态或非静态 Bean所在的类必须被spring扫描加载否则该注解无法生效
相关属性 value默认定义bean的访问id bean的非引用类型属性注入 名称Value 类型属性注解、方法注解 位置属性定义上方方法定义上方 作用设置对应属性的值或对方法进行传参 范例
Component(userDao)
public class UserDaoImpl implements UserDao {Value(${jdbc.username})private String username;private int num;Value(1)private String version;// 这个书写方式可以读取properties文件也可以直接写在set方法上但是写了value的话set方法就可以省略了Value(1)public void setNum(int num) {this.num num;}
}说明 value值仅支持非引用类型数据赋值时对方法的所有参数全部赋值 value值支持读取properties文件中的属性值通过类属性将properties中数据传入类中 value值支持SpEL value注解如果添加在属性上方可以省略set方法set方法的目的是为属性赋值
相关属性 value默认定义对应的属性值或参数值 bean的引用类型属性注入 名称Autowired、Qualifier 类型属性注解、方法注解 位置属性定义上方方法定义上方 作用设置对应属性的对象或对方法进行引用类型传参 范例
Autowired(required false)
Qualifier(userDao)
private UserDao userDao;说明 Autowired默认按类型自动装配Qualifier后可以指定自动装配的bean的id比如有userDao1、userDao2可以指定名称加载 相关属性 required定义该属性是否允许为null
bean的引用类型属性注入 名称Primary 类型类注解 位置类定义上方 作用设置类对应的bean按类型装配时优先装配 范例
Component
Primary
public class ClassName{}说明 Autowired默认按类型装配当出现相同类型的bean使用Primary提高按类型自动装配的优先级多个Primary会导致优先级设置无效 例比如有userDao1、userDao2类但是两个类的Component都没写id配置加载的是userDao这个时候会报错说匹配不到就可以在类上加Primary加在哪个类哪个类优先加载 bean的引用类型属性注入 名称Inject、Named、Resource 说明 Inject与Named是JSR330规范中的注解功能与Autowired和Qualifier完全相同适用于不同架构场景Resource是JSR250规范中的注解可以简化书写格式说白了就是把Autowired、Qualifier合并成Resource Resource相关属性 name设置注入的bean的id就是Autowired type设置注入的bean的类型接收的参数为Class类型就是Qualifier
加载properties文件 名称PropertySource 类型类注解 位置类定义上方 作用加载properties文件中的属性值 范例
PropertySource(value classpath:jdbc.properties)
// 如果有都个文件可以使用数组加载加大括号配置文件之间用逗号隔开
PropertySource(value {classpath:jdbc.properties,classpath:jdbc2.properties},ignoreResourceNotFound true)
public class ClassName {Value(${jdbc.username})private String username;Value(${jdbc.password})private String password;
}说明 不支持*通配格式一旦加载所有spring控制的bean中均可使用对应属性值 相关属性 value默认设置加载的properties文件名 ignoreResourceNotFound如果资源未找到是否忽略默认为false
纯注解格式 名称Configuration、ComponentScan 类型类注解 位置类定义上方 作用设置当前类为spring核心配置加载类 范例
Configuration // 代替spring的配置文件
ComponentScan(com.itzhuzhu) // 代替xml配置文件的包扫描 context:component-scan base-packagecom.itzhuzhu/
public class SpringConfig{
}AnnotationConfigApplicationContext
加载纯注解格式上下文对象需要使用AnnotationConfigApplicationContext加载配置 public static void main(String[] args) {// ApplicationContext ctx new ClassPathXmlApplicationContext(applicationContext.xml);// 加载配置类的字节码AnnotationConfigApplicationContext ctx new AnnotationConfigApplicationContext(SpringConfig.class);UserService userService (UserService) ctx.getBean(userService);UserDao userDao (UserDao) ctx.getBean(userDao);BookDao bookDao (BookDao) ctx.getBean(bookDao);userService.save();userDao.save();bookDao.save();}说明 核心配合类用于替换spring核心配置文件此类可以设置空的不设置变量与属性 bean扫描工作使用注解ComponentScan替代
第三方bean配置与管理 名称Import 类型类注解 位置类定义上方 作用导入第三方bean作为spring控制的资源 范例
Configuration
Import(JDBCConfig.class) //Import只能有一个这里是演示加载多个配置文件
Import({JDBCConfig.class,JDBCConfig2.class})
public class ClassName {
}// spring类配置加载后在JDBCConfig就不需要写Component
public class JDBCConfig {Bean(dataSource)public static DruidDataSource getDataSource() {DruidDataSource ds new DruidDataSource();ds.setDriverClassName(com.mysql.jdbc.Druid);ds.setUrl(jdbc:mysql://localhost:3306/db2);ds.setUsername(你的用户名);ds.setPassword(你的密码);return ds;}
}说明 Import注解在同一个类上仅允许添加一次如果需要导入多个使用数组的形式进行设定加大括号用逗号隔开 在被导入的类中可以继续使用Import导入其他资源 Bean所在的类可以使用导入的形式进入spring容器无需声明为bean
bean加载控制
DependsOn 名称DependsOn 类型类注解、方法注解 位置bean定义的位置类上或方法上 作用控制bean的加载顺序使其在指定bean加载完毕后再加载 范例
Component(userDao)
DependsOn(userService)// 表示userDao依赖userService会先加载userService再加载userDao
public class UserDaoImpl {
}说明 配置在方法上使DependsOn指定的bean优先于Bean配置的bean进行加载 配置在类上使DependsOn指定的bean优先于当前类中所有Bean配置的bean进行加载 配置在类上使DependsOn指定的bean优先于Component等配置的bean进行加载
相关属性
value默认设置当前bean所依赖的bean的id
应用场景 聊天通信先启动发消息再启动接收消息用于bean的加载顺序控制 双11活动期间零点前是结算策略A零点后是结算策略B策略B操作的数据为促销数据。策略B加载顺序与促销数据的加载顺序
Order 名称Order 类型配置类注解 位置配置类定义的位置类上 作用控制配置类的加载顺序 范例
Order(1)
public class SpringConfig {
}应用场景
多个种类的配置出现后优先加载系统级的然后加载业务级的避免细粒度的加载控制
Lazy 名称Lazy 类型类注解、方法注解 位置bean定义的位置类上或方法上 作用控制bean的加载时机使其延迟加载 范例
Order(1)
public class SpringConfigClassName {
}应用场景
程序灾难出现后对应的应急预案处理是启动容器时加载时机