首先我们先了解一下注解有哪些
1.spring常见的注解有哪些?
@Component 翻译: 名词:部件,元件,构件,零件
形容词:组成的
@Controller;控制层 @Service; 服务层 @Repository 持久层
1.1.Component 通用注释,表示此类已经加入spring管理.
1.2.@Controller;@Service;@Repository 是component 的更加细粒度的表业务层次,放在不同的层工作.
2.所在包路径,org.springframework.stereotype
我们都知道 Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架
以建表语句为例:
定义注解类
@Target(ElementType.TYPE)//表示注解用在类、接口
@Retention(RetentionPolicy.RUNTIME)//在JVM运行期间也保留注解的内容
public @interface DbTable {
public String name() default "";
}
@Target(ElementType.FIELD)//表示注解用在类的属性
@Retention(RetentionPolicy.RUNTIME)
@interface SQLString {
int id() default 0;
int value() default 0;
String name() default "";
}
定义Member类
//@DbTable(name = "嘻嘻嘻")
@DbTable
class Member {
/*
如果程序员的注解中定义了名为value的元素,并且在应用改注解的时候,如果该元素是唯一需要赋值的一个元素,那么此时唔需要使用名=值对的这种语法,而只需要
在括号内给出value元素所需的值即可
*/
@SQLString(value = 50, name = "5000")
String lasttName;
@SQLString(80)//只对value的字段进行赋值
String firstName;
}
//将上面的Member转化为建表语句
class TableCreator {
public static void main(String[] args) throws ClassNotFoundException {
args = new String[]{"xmht.javabase.annotation.Member"};
for (String className : args) {
Class<?> cl = Class.forName(className);
DbTable dbTable = cl.getAnnotation(DbTable.class);
if (dbTable == null) {
System.out.println("No DBTable annotations in class " + className);
continue;
}
String tableName = dbTable.name();
if (tableName.length() < 1) {
tableName = cl.getSimpleName().toUpperCase();
}
ArrayList<String> columnDefs = new ArrayList<>();
for (Field field : cl.getDeclaredFields()) {
String columnName = null;
Annotation[] anns = field.getDeclaredAnnotations();每一个field只有一个注解,所以anns[0]
if (anns.length < 1) {
continue; //not a bd table column
}
if (anns[0] instanceof SQLString) {
SQLString sString = (SQLString) anns[0];
if (sString.name().length() < 1) {
columnName = field.getName().toUpperCase();
} else {
columnName = sString.name();
}
columnDefs.add(columnName + " VARCHAR(" + sString.value() + ")" + getConstraints(sString.constraints()));
}
StringBuilder createCommand = new StringBuilder(
"CREATE TABLE " + tableName + "("
);
for (String columndef : columnDefs) {
createCommand.append("\n " + columndef + ",");
}
String tableCreate = createCommand.substring(0, createCommand.length() - 1) + ");";
System.out.println("Table cteation sql for " + className + " is : \n" + tableCreate);
}
}
private static String getConstraints(Constraints con) {
String constraints = "";
if (!con.allowNull()) {
constraints += " NOT NULL";
}
if (con.primaryKey()) {
constraints += " PRIMARY KEY";
}
if (con.unique()) {
constraints += " UNIQUE";
}
return constraints;
}
}